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

cja*_*cja 82 t-sql sql-server

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

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

我怎样才能做到这一点?

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

Joh*_*Woo 137

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

SELECT convert(varchar(25), getdate(), 120) 
Run Code Online (Sandbox Code Playgroud)

  • 我仍然无法克服你必须传递任意数字以获得正确格式的事实 (42认同)
  • @cja我完全赞同你的惊喜.我想提供一个字符串,比如*yyddss*来获得我想要的确切格式.这可能是技术或历史原因.但仍然 - 非常surpriannoying. (4认同)
  • 感谢您的快速修复,但在您的回答中,您将月份编码为分钟,yyyy-MM-dd hh:mm:ss NOT yyyy-mm-dd hh:mm:ss (2认同)

Tar*_*ryn 28

有许多不同的方法来convert一个datetime一个字符串.这是一种方式:

SELECT convert(varchar(25), getdate(), 121)  – yyyy-mm-dd hh:mm:ss.mmm
Run Code Online (Sandbox Code Playgroud)

演示

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

如何在SQL Server中格式化日期时间和日期


小智 13

SELECT CONVERT(varchar, @datetime, 103) --for UK Date format 'DD/MM/YYYY'
Run Code Online (Sandbox Code Playgroud)

101 - 美国 - 月/日/年

108 - 时间 - HH:MI:SS

112 - 日期 - YYYYMMDD

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

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


g2s*_*ver 8

除了前面答案中的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')
Run Code Online (Sandbox Code Playgroud)

结果:

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
Run Code Online (Sandbox Code Playgroud)

  • @Grim 你也可以这样做。从文档中`格式参数必须包含有效的 .NET Framework 格式字符串,可以是标准格式字符串(例如“C”或“D”),也可以是日期和数值的自定义字符模式(例如例如,“MMMM DD,yyyy (dddd)”)` (2认同)

Jer*_*026 7

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

SELECT convert(varchar(20), getdate(), 120)
Run Code Online (Sandbox Code Playgroud)

以上将以YYYY-MM-DD HH:MM:SS24小时制的格式返回当前日期和时间.

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


Tod*_*den 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'
Run Code Online (Sandbox Code Playgroud)

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'
Run Code Online (Sandbox Code Playgroud)

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

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

SELECT
    @myDateTime AS 'myDateTime'
    ,@myDate AS 'myDate'
Run Code Online (Sandbox Code Playgroud)