如何在T-SQL中将datetime转换为字符串

时间:2013-02-22 17:24:34

标签: sql-server tsql

我很惊讶不能在这里找到这个问题。

我有一个日期时间var,我想将它转换为字符串,以便我可以将它附加到另一个字符串。我想要的格式可以很容易地转换回日期时间。

我该怎么做?

(我想要日期部分和时间部分。)

10 个答案:

答案 0 :(得分:132)

以下查询将获取当前日期时间并转换为字符串。使用以下格式
yyyy-mm-dd hh:mm:ss(24h)

SELECT convert(varchar(25), getdate(), 120) 

答案 1 :(得分:28)

convert datetime字符串的方法有很多种。这是一种方式:

SELECT convert(varchar(25), getdate(), 121)  – yyyy-mm-dd hh:mm:ss.mmm

请参阅Demo

这是一个包含所有转化列表的网站:

How to Format datetime & date in SQL Server

答案 2 :(得分:7)

您可以使用Microsoft SQL Server中的convert语句将日期转换为字符串。使用的语法示例如下:

SELECT convert(varchar(20), getdate(), 120)

上述内容将以24小时制格式YYYY-MM-DD HH:MM:SS的格式返回当前日期和时间。

您可以将语句末尾的数字更改为多个中的一个,这将更改返回的字符串格式。可以在CAST and CONVERT参考部分的MSDN上找到这些代码的列表。

答案 3 :(得分:5)

根据我的要求和使用的版本,有3种不同的方法。

以下是方法..

1)使用转换

DECLARE @DateTime DATETIME = GETDATE();
--Using Convert
SELECT
    CONVERT(NVARCHAR, @DateTime,120) AS 'myDateTime'
    ,CONVERT(NVARCHAR(10), @DateTime, 120) AS 'myDate'
    ,RIGHT(CONVERT(NVARCHAR, @DateTime, 120),8) AS 'myTime'

2)使用Cast(SQL Server 2008及更高版本)

SELECT
    CAST(@DateTime AS DATETIME2) AS 'myDateTime'
    ,CAST(@DateTime AS DATETIME2(3)) AS 'myDateTimeWithPrecision'
    ,CAST(@DateTime AS DATE) AS 'myDate'
    ,CAST(@DateTime AS TIME) AS 'myTime'
    ,CAST(@DateTime AS TIME(3)) AS 'myTimeWithPrecision'

3)使用定长字符数据类型

DECLARE @myDateTime NVARCHAR(20) = CONVERT(NVARCHAR, @DateTime, 120);
DECLARE @myDate NVARCHAR(10) = CONVERT(NVARCHAR, @DateTime, 120);

SELECT
    @myDateTime AS 'myDateTime'
    ,@myDate AS 'myDate'

答案 4 :(得分:4)

除了之前答案中的CASTCONVERT函数之外,如果您使用的是SQL Server 2012及更高版本,则使用FORMAT函数转换DATETIME基于类型到字符串。

要转换回来,请使用相反的PARSETRYPARSE函数。

格式化样式基于.NET(类似于ToString()方法的字符串格式化选项),并具有文化感知的优势。例如

DECLARE @DateTime DATETIME2 = SYSDATETIME();
DECLARE @StringResult1 NVARCHAR(100) = FORMAT(@DateTime, 'g') --without culture
DECLARE @StringResult2 NVARCHAR(100) = FORMAT(@DateTime, 'g', 'en-gb') 
SELECT @DateTime
SELECT @StringResult1, @StringResult2
SELECT PARSE(@StringResult1 AS DATETIME2)
SELECT PARSE(@StringResult2 AS DATETIME2 USING 'en-gb')

结果:

2015-06-17 06:20:09.1320951
6/17/2015 6:20 AM
17/06/2015 06:20
2015-06-17 06:20:00.0000000
2015-06-17 06:20:00.0000000

答案 5 :(得分:1)

检查t-sql的CAST和CONVERT语法:

http://msdn.microsoft.com/en-us/library/ms187928.aspx

答案 6 :(得分:1)

很多人都回答了这个问题,但是我觉得最简单的解决方案没有了。

SQL SERVER(我相信它的2012+版本)具有DATETIME2的隐式字符串等效项,如here

请参阅“ datetime2支持的字符串文字格式”部分

要明确回答OP的问题:

DECLARE @myVar NCHAR(32)
DECLARE @myDt DATETIME2
SELECT @myVar = @GETDATE()
SELECT @myDt = @myVar
PRINT(@myVar)
PRINT(@myDt)

输出:

Jan 23 2019 12:24PM             
2019-01-23 12:24:00.0000000

注意:  第一个变量(myVar)实际上也持有值'2019-01-23 12:24:00.0000000'。由于使用Jan 23 2019 12:24PM时会调用的SQL SERVER的默认格式设置,因此它只是被格式化为PRINT。请勿因此而被绊倒,(myVer) = '2019-01-23 12:24:00.0000000'

中的实际字符串

答案 7 :(得分:0)

尝试以下:

DECLARE @myDateTime DATETIME
SET @myDateTime = '2013-02-02'

-- Convert to string now
SELECT LEFT(CONVERT(VARCHAR, @myDateTime, 120), 10)

答案 8 :(得分:0)

SELECT CONVERT(varchar, @datetime, 103) --for UK Date format 'DD/MM/YYYY'

101-美国-MM / DD / YYYY

108-时间-HH:MI:SS

112-日期-YYYYMMDD

121-ODBC-YYYY-MM-DD HH:MI:SS.FFF

20-ODBC-YYYY-MM-DD HH:MI:SS

答案 9 :(得分:0)

在我的存储过程中是这样工作的。

convert(varchar(10), StartingDate) AS 'StartingDate'