Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

SQL Server DATEPART() vs DATENAME() – Apa Bedanya?

Saat bekerja dengan tanggal di SQL Server, terkadang Anda mungkin menemukan diri Anda meraih DATEPART() fungsi, hanya untuk menyadari bahwa yang benar-benar Anda butuhkan adalah DATENAME() fungsi. Kemudian mungkin ada situasi lain di mana DATEPART() sebenarnya lebih disukai daripada DATENAME() .

Jadi apa perbedaan antara DATEPART() dan DATENAME() fungsi?

Mari kita cari tahu.

Definisi

Perbedaan antara kedua fungsi ini terletak pada definisinya:

DATEPART()
Mengembalikan bilangan bulat yang mewakili datepart . yang ditentukan dari tanggal yang ditentukan .
DATENAME()
Mengembalikan string karakter yang mewakili datepart . yang ditentukan dari tanggal yang ditentukan

Menurut definisi mereka, satu-satunya perbedaan antara kedua fungsi ini adalah tipe pengembalian:

  • DATEPART() mengembalikan bilangan bulat.
  • DATENAME() mengembalikan string.

Jadi itulah perbedaannya.

Dalam kedua definisi, datepart adalah bagian dari tanggal yang Anda inginkan (misalnya bulan), dan tanggal adalah tanggal yang Anda inginkan untuk mengembalikan bagian tanggal.

Nama Bulan dan Hari

Contoh paling jelas di mana DATENAME() lebih cocok untuk DATEPART() adalah saat Anda ingin mengembalikan nama hari atau bulan.

Ini contohnya.

NAMA TANGGAL()

Ini dia DATENAME() kembali ketika kita menginginkan hari kerja dan bulan dari tanggal:

SELECT
    DATENAME(weekday, '2000-01-01') AS 'DATENAME Weekday',
    DATENAME(month, '2000-01-01') AS 'DATENAME Month';

Hasil:

+--------------------+------------------+
| DATENAME Weekday   | DATENAME Month   |
|--------------------+------------------|
| Saturday           | January          |
+--------------------+------------------+

DATEPART()

Ini dia DATEPART() kembali:

SELECT
    DATEPART(weekday, '2000-01-01') AS 'DATEPART Weekday',
    DATEPART(month, '2000-01-01') AS 'DATEPART Month';

Hasil:

+--------------------+------------------+
| DATEPART Weekday   | DATEPART Month   |
|--------------------+------------------|
| 7                  | 1                |
+--------------------+------------------+

Saat Hasil Sama

Dalam kebanyakan kasus, hasil dari kedua fungsi akan tampak sama. Ini karena sebagian besar bagian tanggal bersifat numerik. Misalnya:

SELECT
    DATEPART(year, '2000-01-01') AS DATEPART,
    DATENAME(year, '2000-01-01') AS DATENAME;

Hasil:

+------------+------------+
| DATEPART   | DATENAME   |
|------------+------------|
| 2000       | 2000       |
+------------+------------+

Namun, seperti yang disebutkan, yang satu mengembalikan bilangan bulat dan yang lainnya mengembalikan string.

Kita dapat melihat buktinya dengan contoh berikut:

SELECT
    DATEPART(year, '2000-01-01') + '1' AS DATEPART,
    DATENAME(year, '2000-01-01') + '1' AS DATENAME;

Hasil:

+------------+------------+
| DATEPART   | DATENAME   |
|------------+------------|
| 2001       | 20001      |
+------------+------------+

Tanda plus adalah operator aritmatika pada tipe data numerik, tetapi merupakan operator penggabungan string pada string.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Masukkan seluruh DataTable ke dalam database sekaligus, bukan baris demi baris?

  2. Cari Tahu apakah Tabel Dipartisi di SQL Server (T-SQL)

  3. Saya mendapatkan upaya telah dilakukan untuk memuat program dengan kesalahan format yang salah pada proyek replikasi SQL Server

  4. Skema basis data, peningkatan otomatis

  5. Apa yang dilakukan transaksi di sekitar satu pernyataan?