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

Cara Mengonversi String ke Tanggal/Waktu di SQL Server menggunakan PARSE()

Jika Anda bekerja dengan SQL Server, kemungkinan Anda telah menggunakan setidaknya satu dari CONVERT() atau CAST() berfungsi untuk mengkonversi dari satu tipe data ke tipe data lainnya. Jika Anda pernah mengalami kesalahan saat mencoba mengonversi string ke tipe data tanggal/waktu, PARSE() fungsi bisa menjadi apa yang Anda butuhkan.

Misalnya, jika Anda memiliki string seperti katakanlah, Jumat, 20 Jul 2018 , CONVERT() atau CAST() fungsi akan melempar kesalahan. Namun PARSE() fungsi akan menanganinya tanpa masalah.

PARSE() fungsi mengembalikan hasil ekspresi, diterjemahkan ke tipe data yang diminta di SQL Server. Jadi Anda dapat menggunakannya untuk "menerjemahkan" nilai string Anda menjadi tipe data tanggal/waktu (seperti tanggal , waktu tanggal , datetime2 , dll).

Sintaks

Berikut sintaks untuk PARSE() fungsi:

PARSE ( string_value AS data_type [ USING culture ] )

Dimana string_value adalah nilai yang ingin diurai, data_type adalah tipe data yang Anda inginkan untuk diuraikan, dan culture adalah argumen opsional yang dapat Anda gunakan untuk menentukan format bahasa yang akan digunakan saat mengurai string.

Contoh Dasar

Berikut adalah contoh dasar untuk mendemonstrasikan penggunaan.

SELECT PARSE('Friday, 20 July 2018' AS datetime2) 
AS 'Result';

Hasil:

+-----------------------------+
| Result                      |
|-----------------------------|
| 2018-07-20 00:00:00.0000000 |
+-----------------------------+

Hapus Bagian Waktu

Pada contoh sebelumnya, kami menetapkan bahwa string harus diuraikan sebagai datetime2 tipe data. Tipe data ini termasuk komponen waktu dengan presisi tinggi. Jika Anda tidak memerlukan komponen waktu, Anda selalu dapat menguraikannya sebagai tanggal tipe data.

Inilah hasilnya jika kita menentukan tanggal tipe data:

SELECT PARSE('Friday, 20 July 2018' AS date) 
AS 'Result';

Hasil:

+------------+
| Result     |
|------------|
| 2018-07-20 |
+------------+

Pertahankan Bagian Waktu, Tapi dengan Kurang Presisi

Dan jika Anda melakukannya membutuhkan waktu, tetapi dengan kurang presisi, Anda selalu dapat menggunakan smalldatetime tipe data:

SELECT PARSE('2:35:50pm, Friday, 20 July 2018' AS smalldatetime) 
AS 'Result';

Hasil:

+---------------------+
| Result              |
|---------------------|
| 2018-07-20 14:36:00 |
+---------------------+

Namun jika itu tidak cukup tepat, selalu ada waktu kencan tipe data:

SELECT PARSE('2:35:50.5234pm, Friday, 20 July 2018' AS datetime) 
AS 'Result';

Hasil:

+-------------------------+
| Result                  |
|-------------------------|
| 2018-07-20 14:35:50.523 |
+-------------------------+

Variasi Input Tanggal

PARSE() function biasanya dapat menentukan tanggal yang Anda coba konversi, selama Anda memberikannya sebagai representasi valid dari tipe data yang diminta. Berikut adalah beberapa contoh tanggal yang disediakan dalam berbagai gaya:

SELECT 
    PARSE('Friday, 20 July 2018' AS date) AS 'Result 1',
    PARSE('Fri, 20 July 2018' AS date) AS 'Result 2',
    PARSE('Friday, July 20 2018' AS date) AS 'Result 3',
    PARSE('Fri 20 Jul 18' AS date) AS 'Result 4';

Hasil:

+------------+------------+------------+------------+
| Result 1   | Result 2   | Result 3   | Result 4   |
|------------+------------+------------+------------|
| 2018-07-20 | 2018-07-20 | 2018-07-20 | 2018-07-20 |
+------------+------------+------------+------------+

Namun, itu bukan psikis:

SELECT PARSE('Next Friday' AS date) 
AS 'Result';

Hasil:

Error converting string value 'Next Friday' into data type date using culture ''. 

Tambahkan Budaya

Anda dapat menambahkan argumen ketiga untuk menentukan budaya tempat string Anda diformat. Misalnya, jika tanggal Anda 01/06/2018 , ini bisa berarti 6 Januari 2018 atau 1 Juni 2018 , tergantung pada budaya yang digunakan.

Berikut ini contoh menentukan budaya:

SELECT 
    PARSE('01/06/2018' AS date USING 'en-US') AS 'en-US',
    PARSE('01/06/2018' AS date USING 'en-GB') AS 'en-GB';

Hasil:

+------------+------------+
| en-US      | en-GB      |
|------------+------------|
| 2018-01-06 | 2018-06-01 |
+------------+------------+

Jika Anda tidak memberikan argumen ini, bahasa sesi saat ini akan digunakan.

Menyediakan Hari Kerja yang Salah

PARSE() fungsinya cukup cerdas, jika Anda memberikan hari kerja yang salah, itu akan mengembalikan kesalahan.

Jadi jika kita menggunakan tanggal yang sama dengan contoh sebelumnya, tetapi kita mengubah hari kerja dari Jumat menjadi Kamis, inilah yang terjadi:

SELECT PARSE('Thursday, 20 July 2018' AS date) 
AS 'Result';

Hasil:

Error converting string value 'Thursday, 20 July 2018' into data type date using culture ''.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana Fungsi STRING_ESCAPE() Bekerja di SQL Server (T-SQL)

  2. Kinerja Query SQL Server 2005

  3. ADO.NET memanggil Prosedur Tersimpan T-SQL menyebabkan SqlTimeoutException

  4. 3 Cara Mendapatkan Tipe Data Kolom di SQL Server (T-SQL)

  5. Pemecahan Masalah Kesalahan Microsoft SQL Server 18456