it-swarm-vi.tech

Cách chuyển đổi DateTime sang VarChar

Tôi đang làm việc với một truy vấn trong Sql Server 2005, nơi tôi cần chuyển đổi một giá trị trong biến DateTime thành biến varchar ở định dạng yyyy-mm-dd (không có phần thời gian). Làm thế nào để làm điều đó?

271
Ali

Với máy chủ Microsoft Sql:

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

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

Đây là một số sql thử nghiệm cho tất cả các phong cách.

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

Đây là kết quả

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

Làm cho nvarchar(max) ngắn hơn để cắt thời gian. Ví dụ:

select convert(nvarchar(11), GETDATE(), 0)
union select convert(nvarchar(max), GETDATE(), 0)

đầu ra:

May 18 2018
May 18 2018  9:57AM
338
Colin

Hãy thử như sau:

CONVERT(varchar(10), [MyDateTimecolumn], 20)

Đối với một thời gian đầy đủ ngày và không chỉ ngày làm: 

CONVERT(varchar(23), [MyDateTimecolumn], 121)

Xem trang này để chuyển đổi kiểu:

http://msdn.Microsoft.com/en-us/l Library/ms187928.aspx
HOẶC LÀ
Hàm SQL CHUYỂN ĐỔI ()

179
Joel Coehoorn

SQL Server 2012 có chức năng mới, FORMAT: http://msdn.Microsoft.com/en-us/l Library/ee634924.aspx

và bạn có thể sử dụng chuỗi định dạng thời gian ngày tùy chỉnh: http://msdn.Microsoft.com/en-us/l Library/ee634398.aspx

Các trang này ngụ ý nó cũng có sẵn trên SQL2008R2, nhưng tôi không có tiện ích để kiểm tra nếu đó là trường hợp.

Ví dụ sử dụng (datetime Úc): 

FORMAT(VALUE,'dd/MM/yyyy h:mm:ss tt')
27
Zar Shardan

Hoặc là Cast hoặc Convert:

Cú pháp cho CAST:

CAST ( expression AS data_type [ (length ) ])

Cú pháp cho CONVERT:

CONVERT ( data_type [ ( length ) ] , expression [ , style ] )

http://msdn.Microsoft.com/en-us/l Library/ms187928.aspx

Trên thực tế vì bạn đã yêu cầu một định dạng cụ thể:

REPLACE(CONVERT(varchar(10), Date, 102), '.', '-')
9

Bạn có thể sử dụng DATEPART(DATEPART, VARIABLE). Ví dụ:

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

- Điều này cho bạn thời gian là 0 ở định dạng 'yyyy-mm-dd 00: 00: 00.000'


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

Với máy chủ Microsoft SQL:

Sử dụng Cú pháp cho CHUYỂN ĐỔI:

CONVERT ( data_type [ ( length ) ] , expression [ , style ] )

Thí dụ:

SELECT CONVERT(varchar,d.dateValue,1-9)

Đối với kiểu bạn có thể tìm thêm thông tin ở đây: MSDN - Truyền và chuyển đổi (Transact-SQL) .

4
dmunozpa

Thử:

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

Thêm về ms lời khuyên sql

2
Arek Bee

Hãy thử như sau:

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

Sau đó, bạn sẽ cần phải thay thế "." với "-".

Đây là một trang web giúp http://www.mssqltips.com/tip.asp?tip=1145

2
Amy Patterson
declare @dt datetime

set @dt = getdate()

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

Tôi có độ dài dữ liệu cố định là char(10) vì bạn muốn một định dạng chuỗi cụ thể.

2
Andy Jones

Đây là cách tôi thực hiện: CONVERT(NVARCHAR(10), DATE1, 103) )

1
IvanSnek

Bạn có thể chuyển đổi ngày của mình theo nhiều định dạng, cú pháp rất dễ sử dụng:

CONVERT('TheTypeYouWant', 'TheDateToConvert', 'TheCodeForFormating' * )
CONVERT(NVARCHAR(10), DATE_OF_DAY, 103) => 15/09/2016
  • Mã là một số nguyên, ở đây 3 là công thức thứ ba không có thế kỷ, nếu bạn muốn thế kỷ chỉ cần thay đổi mã thành 103.

Trong trường hợp của bạn, tôi vừa chuyển đổi và giới hạn kích thước bởi nvarchar (10) như thế này:

CONVERT(NVARCHAR(10), MY_DATE_TIME, 120) => 2016-09-15

Xem thêm tại: http://www.w3schools.com/sql/func_convert.asp

Một giải pháp khác (nếu ngày của bạn là Ngày tháng) là một đơn giản CAST:

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

Hãy thử SQL này:

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

OP đã đề cập datetime format. Đối với tôi, phần thời gian cản trở.
Tôi nghĩ rằng sẽ sạch hơn một chút để loại bỏ phần thời gian (bằng cách truyền datetime đến ngày) trước khi định dạng.

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

Đối với SQL Server 2008+ Bạn có thể sử dụng CONVERT và FORMAT cùng nhau.

Ví dụ: đối với dấu thời gian theo phong cách châu Âu (ví dụ: Đức):

CONVERT(VARCHAR, FORMAT(GETDATE(), 'dd.MM.yyyy HH:mm:ss', 'de-DE'))
1
Peter Majko

Viết hàm

CREATE FUNCTION dbo.TO_SAP_DATETIME(@input datetime)
RETURNS VARCHAR(14)
AS BEGIN
    DECLARE @ret VARCHAR(14)
    SET @ret = COALESCE(SUBSTRING(REPLACE(REPLACE(REPLACE(CONVERT(VARCHAR(26), @input, 25),'-',''),' ',''),':',''),1,14),'00000000000000');
    RETURN @ret
END
0
Beyhan
DECLARE @DateTime DATETIME
SET @DateTime = '2018-11-23 10:03:23'
SELECT CONVERT(VARCHAR(100),@DateTime,121 )
0
Dilkhush

Bạn không nói cơ sở dữ liệu nào, nhưng với mysql ở đây là một cách dễ dàng để lấy ngày từ dấu thời gian (và chuyển đổi loại varchar sẽ tự động xảy ra):

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

Cách ngắn nhất và đơn giản nhất là:

DECLARE @now AS DATETIME = GETDATE()

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