我很惊讶在这里找不到这个问题。我有一个日期时间变量,我想将其转换为字符串,以便将其附加到另一个字符串中。我希望它的格式可以轻松地转换回日期时间。我该怎么做?(我想要日期部分和时间部分。)
yyyy-mm-dd hh:mm:ss(24h)
SELECT convert(varchar(25), getdate(), 120)
DateTimeOffSet
时,请确保将varchar
长度调整为您想要的输出外观。对于我来说,我不想要时区,因此必须使用SELECT convert(varchar(19), sysdatetimeoffset(), 120)
。 - RoLYroLLsSELECT convert(varchar(25), getdate(), 121) – yyyy-mm-dd hh:mm:ss.mmm
除了之前回答中提到的 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
format
参数必须包含一个有效的.NET Framework格式字符串,可以是标准格式字符串(例如,“C”或“D”),也可以是日期和数字值的自定义字符模式(例如,“MMMM DD, yyyy (dddd)”)。 - g2server使用 FORMAT 函数以区域设置方式将日期/时间和数字值格式化为字符串。对于通用数据类型转换,请使用 CAST 或 CONVERT。
- g2serverSELECT 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
根据我的需求和正在使用的版本,有三种不同的方法。
以下是这些方法:
1)使用Convert
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'
convert
语句将日期转换为字符串。语法示例如下:SELECT convert(varchar(20), getdate(), 120)
YYYY-MM-DD HH:MM:SS
,采用24小时制。您可以更改语句末尾的数字,以便更改返回字符串的格式。可以在MSDN的CAST和CONVERT参考部分中找到这些代码的列表。请尝试以下内容:
DECLARE @myDateTime DATETIME
SET @myDateTime = '2013-02-02'
-- Convert to string now
SELECT LEFT(CONVERT(VARCHAR, @myDateTime, 120), 10)
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'
。由于SQL SERVER默认格式设置会在使用PRINT
时调用,所以它会被格式化为Jan 23 2019 12:24PM
。请不要被这个绊倒,(myVer)
中的实际字符串='2019-01-23 12:24:00.0000000'
。StartingDate
转换为 varchar(10)
类型,并且别名为 'StartingDate'。