令我惊讶的是现在还不能找到这个问题。
我有一个日期时间var,我想将其转换为字符串,以便可以将其附加到另一个字符串。我想要一种可以轻松转换回日期时间的格式。
我怎样才能做到这一点?
(我想要日期部分和时间部分。)
令我惊讶的是现在还不能找到这个问题。
我有一个日期时间var,我想将其转换为字符串,以便可以将其附加到另一个字符串。我想要一种可以轻松转换回日期时间的格式。
我怎样才能做到这一点?
(我想要日期部分和时间部分。)
Convert
,双击以突出显示,然后按Shift + F1 ...始终是第一道防线。
Answers:
以下查询将获取当前日期时间并转换为字符串。具有以下格式yyyy-mm-dd hh:mm:ss(24h)
SELECT convert(varchar(25), getdate(), 120)
DateTimeOffSet
,请确保将varchar
长度调整为所需的结果。对我来说,我不希望时区,所以我不得不使用SELECT convert(varchar(19), sysdatetimeoffset(), 120)
您可以使用convert
Microsoft SQL Server中的语句将日期转换为字符串。使用的语法示例为:
SELECT convert(varchar(20), getdate(), 120)
上面的代码将以YYYY-MM-DD HH:MM:SS
24小时制的格式返回当前日期和时间的字符串。
您可以将语句末尾的数字更改为许多将更改返回的字符串格式的数字之一。这些代码的列表可以在MAST的CAST和CONVERT参考部分中找到。
有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'
除了前面的答案中的CAST
和CONVERT
函数外,如果您使用的是SQL Server 2012及更高版本,则可以使用FORMAT函数将DATETIME
基本类型转换为字符串。
要转换回来,请使用相反的PARSE
或TRYPARSE
函数。
格式设置样式基于.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
The format argument must contain a valid .NET Framework format string, either as a standard format string (for example, "C" or "D"), or as a pattern of custom characters for dates and numeric values (for example, "MMMM DD, yyyy (dddd)")
Use the FORMAT function for locale-aware formatting of date/time and number values as strings. For general data type conversions, use CAST or CONVERT.
检查t-sql的CAST和CONVERT语法:
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
许多人都回答了这个问题,但是我觉得最简单的解决方案已经被遗漏了。
SQL SERVER(我相信它的2012+)有DATETIME2隐串等同如图所示这里
请参阅“ 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'