Saya mengerjakan kueri di Sql Server 2005 di mana saya perlu mengubah nilai dalam DateTime
variabel menjadi varchar
variabel dalam yyyy-mm-dd
format (tanpa bagian waktu). Bagaimana aku melakukan itu?
Saya mengerjakan kueri di Sql Server 2005 di mana saya perlu mengubah nilai dalam DateTime
variabel menjadi varchar
variabel dalam yyyy-mm-dd
format (tanpa bagian waktu). Bagaimana aku melakukan itu?
Jawaban:
Dengan Microsoft Sql Server:
--
-- Create test case
--
DECLARE @myDateTime DATETIME
SET @myDateTime = '2008-05-03'
--
-- Convert string
--
SELECT LEFT(CONVERT(VARCHAR, @myDateTime, 120), 10)
LEFT(.., 10)
bukan CONVERT(CHAR(10), ...)
? Mereka yang bekerja dengan versi SQL Server yang lebih baru dari 2005 (!) Harus memeriksa jawabannya oleh Zar Shardan menyarankan solusi berdasarkan pada FORMAT(date_value, format_string)
fungsi.
FORMAT()
relatif terlalu lambat untukconvert(char(10),...)
Inilah beberapa sql uji untuk semua gaya.
DECLARE @now datetime
SET @now = GETDATE()
select convert(nvarchar(MAX), @now, 0) as output, 0 as style
union select convert(nvarchar(MAX), @now, 1), 1
union select convert(nvarchar(MAX), @now, 2), 2
union select convert(nvarchar(MAX), @now, 3), 3
union select convert(nvarchar(MAX), @now, 4), 4
union select convert(nvarchar(MAX), @now, 5), 5
union select convert(nvarchar(MAX), @now, 6), 6
union select convert(nvarchar(MAX), @now, 7), 7
union select convert(nvarchar(MAX), @now, 8), 8
union select convert(nvarchar(MAX), @now, 9), 9
union select convert(nvarchar(MAX), @now, 10), 10
union select convert(nvarchar(MAX), @now, 11), 11
union select convert(nvarchar(MAX), @now, 12), 12
union select convert(nvarchar(MAX), @now, 13), 13
union select convert(nvarchar(MAX), @now, 14), 14
--15 to 19 not valid
union select convert(nvarchar(MAX), @now, 20), 20
union select convert(nvarchar(MAX), @now, 21), 21
union select convert(nvarchar(MAX), @now, 22), 22
union select convert(nvarchar(MAX), @now, 23), 23
union select convert(nvarchar(MAX), @now, 24), 24
union select convert(nvarchar(MAX), @now, 25), 25
--26 to 99 not valid
union select convert(nvarchar(MAX), @now, 100), 100
union select convert(nvarchar(MAX), @now, 101), 101
union select convert(nvarchar(MAX), @now, 102), 102
union select convert(nvarchar(MAX), @now, 103), 103
union select convert(nvarchar(MAX), @now, 104), 104
union select convert(nvarchar(MAX), @now, 105), 105
union select convert(nvarchar(MAX), @now, 106), 106
union select convert(nvarchar(MAX), @now, 107), 107
union select convert(nvarchar(MAX), @now, 108), 108
union select convert(nvarchar(MAX), @now, 109), 109
union select convert(nvarchar(MAX), @now, 110), 110
union select convert(nvarchar(MAX), @now, 111), 111
union select convert(nvarchar(MAX), @now, 112), 112
union select convert(nvarchar(MAX), @now, 113), 113
union select convert(nvarchar(MAX), @now, 114), 114
union select convert(nvarchar(MAX), @now, 120), 120
union select convert(nvarchar(MAX), @now, 121), 121
--122 to 125 not valid
union select convert(nvarchar(MAX), @now, 126), 126
union select convert(nvarchar(MAX), @now, 127), 127
--128, 129 not valid
union select convert(nvarchar(MAX), @now, 130), 130
union select convert(nvarchar(MAX), @now, 131), 131
--132 not valid
order BY style
Inilah hasilnya
output style
Apr 28 2014 9:31AM 0
04/28/14 1
14.04.28 2
28/04/14 3
28.04.14 4
28-04-14 5
28 Apr 14 6
Apr 28, 14 7
09:31:28 8
Apr 28 2014 9:31:28:580AM 9
04-28-14 10
14/04/28 11
140428 12
28 Apr 2014 09:31:28:580 13
09:31:28:580 14
2014-04-28 09:31:28 20
2014-04-28 09:31:28.580 21
04/28/14 9:31:28 AM 22
2014-04-28 23
09:31:28 24
2014-04-28 09:31:28.580 25
Apr 28 2014 9:31AM 100
04/28/2014 101
2014.04.28 102
28/04/2014 103
28.04.2014 104
28-04-2014 105
28 Apr 2014 106
Apr 28, 2014 107
09:31:28 108
Apr 28 2014 9:31:28:580AM 109
04-28-2014 110
2014/04/28 111
20140428 112
28 Apr 2014 09:31:28:580 113
09:31:28:580 114
2014-04-28 09:31:28 120
2014-04-28 09:31:28.580 121
2014-04-28T09:31:28.580 126
2014-04-28T09:31:28.580 127
28 جمادى الثانية 1435 9:31:28:580AM 130
28/06/1435 9:31:28:580AM 131
Buat nvarchar(max)
lebih pendek untuk mengurangi waktu. Sebagai contoh:
select convert(nvarchar(11), GETDATE(), 0)
union select convert(nvarchar(max), GETDATE(), 0)
output:
May 18 2018
May 18 2018 9:57AM
dd-mm
atau jun - 28
. Ada pilihan ??
Coba yang berikut ini:
CONVERT(varchar(10), [MyDateTimecolumn], 20)
Untuk waktu tanggal penuh dan bukan hanya tanggal, lakukan:
CONVERT(varchar(23), [MyDateTimecolumn], 121)
Lihat halaman ini untuk gaya konversi:
http://msdn.microsoft.com/en-us/library/ms187928.aspx
ATAU
SQL Server CONVERT () Fungsi
SQL Server 2012 memiliki fungsi baru, FORMAT: http://msdn.microsoft.com/en-us/library/ee634924.aspx
dan Anda dapat menggunakan string format waktu tanggal khusus: http://msdn.microsoft.com/en-us/library/ee634398.aspx
Halaman-halaman ini menyiratkan itu juga tersedia di SQL2008R2, tapi saya tidak punya satu berguna untuk menguji apakah itu masalahnya.
Contoh penggunaan (waktu Australia):
FORMAT(VALUE,'dd/MM/yyyy h:mm:ss tt')
Salah satu Cast
atau Convert
:
Sintaks untuk CAST
:
CAST ( expression AS data_type [ (length ) ])
Sintaks untuk CONVERT
:
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )
http://msdn.microsoft.com/en-us/library/ms187928.aspx
Sebenarnya karena Anda meminta format tertentu:
REPLACE(CONVERT(varchar(10), Date, 102), '.', '-')
Dengan Microsoft SQL Server:
Gunakan Sintaks untuk CONVERT:
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )
Contoh:
SELECT CONVERT(varchar,d.dateValue,1-9)
Untuk gaya Anda dapat menemukan info lebih lanjut di sini: MSDN - Cast and Convert (Transact-SQL) .
Coba yang berikut ini:
CONVERT(VARCHAR(10),GetDate(),102)
Maka Anda perlu mengganti "." dengan "-".
Berikut adalah situs yang membantu http://www.mssqltips.com/tip.asp?tip=1145
declare @dt datetime
set @dt = getdate()
select convert(char(10),@dt,120)
Saya memiliki panjang data tetap char(10)
seperti yang Anda inginkan format string tertentu.
Anda dapat mengonversi tanggal Anda dalam banyak format, sintaksisnya mudah digunakan:
CONVERT('TheTypeYouWant', 'TheDateToConvert', 'TheCodeForFormating' * )
CONVERT(NVARCHAR(10), DATE_OF_DAY, 103) => 15/09/2016
Dalam kasus Anda , saya baru saja mengonversi dan membatasi ukuran dengan nvarchar (10) seperti ini:
CONVERT(NVARCHAR(10), MY_DATE_TIME, 120) => 2016-09-15
Lihat lebih lanjut di: http://www.w3schools.com/sql/func_convert.asp
Solusi lain (jika teman kencan Anda adalah Datetime) adalah CAST sederhana :
CAST(MY_DATE_TIME as DATE) => 2016-09-15
Untuk SQL Server 2008+ Anda dapat menggunakan CONVERT dan FORMAT secara bersamaan.
Misalnya, untuk cap waktu gaya Eropa (misalnya Jerman):
CONVERT(VARCHAR, FORMAT(GETDATE(), 'dd.MM.yyyy HH:mm:ss', 'de-DE'))
Anda tidak mengatakan basis data mana, tetapi dengan mysql di sini adalah cara mudah untuk mendapatkan tanggal dari cap waktu (dan konversi tipe varchar akan terjadi secara otomatis):
mysql> select date(now());
+-------------+
| date(now()) |
+-------------+
| 2008-09-16 |
+-------------+
1 row in set (0.00 sec)
Cara terpendek dan paling sederhana adalah:
DECLARE @now AS DATETIME = GETDATE()
SELECT CONVERT(VARCHAR, @now, 23)
select REPLACE(CONVERT(VARCHAR, FORMAT(GETDATE(), N'dd/MM/yyyy hh:mm:ss tt')),'.', '/')
akan memberi 05/05/2020 10:41:05 AM
hasilnya
Anda tidak mengatakan bahasa apa tetapi saya berasumsi C#/.NET
karena ini memiliki DateTime
tipe data asli . Dalam hal itu, konversikan saja menggunakan ToString
metode dan gunakan specifier format seperti:
DateTime d = DateTime.Today;
string result = d.ToString("yyyy-MM-dd");
Namun, saya akan berhati-hati agar tidak menggunakan ini dalam permintaan basis data atau digabungkan menjadi pernyataan SQL. Database membutuhkan string pemformatan khusus untuk digunakan. Anda lebih baik menunjukkan bagian waktu dan menggunakan DateTime sebagai parameter SQL jika itu yang ingin Anda capai.
CONVERT
, lihat dokumentasi MSDN .