103

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

我有一个日期时间变量,我想将其转换为字符串,以便可以将其附加到另一个字符串。我想要一种可以轻松转换回日期时间的格式。

我怎样才能做到这一点?

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

4

10 回答 10

171

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

SELECT convert(varchar(25), getdate(), 120) 
于 2013-02-22T17:25:38.683 回答
34

有许多不同的方法来convertadatetime到一个字符串。这是一种方法:

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

演示

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

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

于 2013-02-22T17:26:04.593 回答
10

根据我的要求和我使用的版本,有 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'
于 2014-02-19T03:42:16.230 回答
8

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

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

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

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

于 2013-02-22T17:28:46.887 回答
8

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

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

格式化样式基于 .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
于 2015-06-17T13:33:20.967 回答
6
SELECT CONVERT(varchar, @datetime, 103) --for UK Date format 'DD/MM/YYYY'

101 - 美国 - 月/日/年

108 - 时间 - HH:MI:SS

112 - 日期 - YYYYMMDD

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

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

于 2018-09-12T08:56:05.993 回答
2

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

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

于 2013-02-22T17:28:17.260 回答
2

试试下面:

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

-- Convert to string now
SELECT LEFT(CONVERT(VARCHAR, @myDateTime, 120), 10)
于 2013-02-22T18:09:14.010 回答
2

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

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

查看“datetime2 支持的字符串文字格式”部分

要明确回答 OPs 问题:

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:24PMSQL SERVER 的默认格式设置在您使用PRINT. 不要在这里被绊倒,(myVer)=中的实际字符串'2019-01-23 12:24:00.0000000'

于 2019-01-23T20:30:06.830 回答
0

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

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

于 2021-04-29T04:47:10.113 回答