it-swarm-id.com

Bagaimana cara mengubah DateTime ke VarChar

Saya mengerjakan kueri di Sql Server 2005 di mana saya harus mengubah nilai dalam variabel DateTime menjadi variabel varchar dalam format yyyy-mm-dd (tanpa waktu). Bagaimana aku melakukan itu?

271
Ali

Dengan Microsoft Sql Server:

--
-- Create test case
--
DECLARE @myDateTime DATETIME
SET @myDateTime = '2008-05-03'

--
-- Convert string
--
SELECT LEFT(CONVERT(VARCHAR, @myDateTime, 120), 10)
241
TonyOssa

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

Jadikan nvarchar(max) lebih pendek untuk memotong 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
338
Colin

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
Fungsi SQL Server CONVERT ()

179
Joel Coehoorn

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')
27
Zar Shardan

Baik 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), '.', '-')

Anda dapat menggunakan DATEPART(DATEPART, VARIABLE). Sebagai contoh:

DECLARE @DAY INT 
DECLARE @MONTH INT
DECLARE @YEAR INT
DECLARE @DATE DATETIME
@DATE = GETDATE()
SELECT @DAY = DATEPART(DAY,@DATE)
SELECT @MONTH = DATEPART(MONTH,@DATE)
SELECT @YEAR = DATEPART(YEAR,@DATE)
8
FCKOE

- Ini memberi Anda waktu sebagai 0 dalam format 'yyyy-mm-dd 00: 00: 00.000'


SELECT CAST( CONVERT(VARCHAR, GETDATE(), 101) AS DATETIME) ; 
5
P's-SQL

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) .

4
dmunozpa

Mencoba:

select replace(convert(varchar, getdate(), 111),'/','-');

Lebih lanjut tentang ms sql tips

2
Arek Bee

Coba yang berikut ini:

CONVERT(VARCHAR(10),GetDate(),102)

Maka Anda perlu mengganti "." dengan "-".

Inilah situs yang membantu http://www.mssqltips.com/tip.asp?tip=1145

2
Amy Patterson
declare @dt datetime

set @dt = getdate()

select convert(char(10),@dt,120) 

Saya telah memperbaiki panjang data char(10) saat Anda menginginkan format string tertentu.

2
Andy Jones

Ini adalah bagaimana saya melakukannya: CONVERT(NVARCHAR(10), DATE1, 103) )

1
IvanSnek

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
  • Kode adalah bilangan bulat, di sini 3 adalah pemformatan ketiga tanpa abad, jika Anda ingin abad hanya mengubah kode menjadi 103.

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:

CAST(MY_DATE_TIME as DATE) => 2016-09-15
1
Ema.H

Coba SQL ini:

select REPLACE(CONVERT(VARCHAR(24),GETDATE(),103),'/','_') + '_'+ 
       REPLACE(CONVERT(VARCHAR(24),GETDATE(),114),':','_')
1
Dilkhush

OP menyebutkan datetime format. Bagi saya, bagian waktu menghalangi.
Saya pikir itu sedikit lebih bersih untuk menghapus bagian waktu (dengan casting datetime to date) sebelum format.

convert( varchar(10), convert( date, @yourDate ) , 111 )
1
m42

Untuk SQL Server 2008+ Anda dapat menggunakan CONVERT dan FORMAT secara bersamaan.

Misalnya, untuk cap waktu gaya Eropa (mis. Jerman):

CONVERT(VARCHAR, FORMAT(GETDATE(), 'dd.MM.yyyy HH:mm:ss', 'de-DE'))
1
Peter Majko
DECLARE @DateTime DATETIME
SET @DateTime = '2018-11-23 10:03:23'
SELECT CONVERT(VARCHAR(100),@DateTime,121 )
0
Dilkhush

Anda tidak mengatakan basis data mana, tetapi dengan mysql di sini adalah cara mudah untuk mendapatkan tanggal dari cap waktu (dan konversi jenis varchar akan terjadi secara otomatis):

mysql> select date(now());
+-------------+
| date(now()) |
+-------------+
| 2008-09-16  | 
+-------------+
1 row in set (0.00 sec)
0
Allan Wind

Cara terpendek dan paling sederhana adalah:

DECLARE @now AS DATETIME = GETDATE()

SELECT CONVERT(VARCHAR, @now, 23)
0
Konstantin
CONVERT(VARCHAR, GETDATE(), 23)
0
Gabriel