关于sql:如何将DateTime转换为VarChar

关于sql:如何将DateTime转换为VarChar

How to convert DateTime to VarChar

我正在Sql Server 2005中进行查询,我需要将DateTime变量中的值转换为yyyy-mm-dd格式(没有时间部分)的varchar变量。 我怎么做?


这是所有样式的一些测试sql。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
DECLARE @now datetime
SET @now = GETDATE()
SELECT CONVERT(nvarchar(MAX), @now, 0) AS output, 0 AS STYLE
UNION SELECT CONVERT(nvarchar(MAX), @now, 1), 1
UNION SELECT CONVERT(nvarchar(MAX), @now, 2), 2
UNION SELECT CONVERT(nvarchar(MAX), @now, 3), 3
UNION SELECT CONVERT(nvarchar(MAX), @now, 4), 4
UNION SELECT CONVERT(nvarchar(MAX), @now, 5), 5
UNION SELECT CONVERT(nvarchar(MAX), @now, 6), 6
UNION SELECT CONVERT(nvarchar(MAX), @now, 7), 7
UNION SELECT CONVERT(nvarchar(MAX), @now, 8), 8
UNION SELECT CONVERT(nvarchar(MAX), @now, 9), 9
UNION SELECT CONVERT(nvarchar(MAX), @now, 10), 10
UNION SELECT CONVERT(nvarchar(MAX), @now, 11), 11
UNION SELECT CONVERT(nvarchar(MAX), @now, 12), 12
UNION SELECT CONVERT(nvarchar(MAX), @now, 13), 13
UNION SELECT CONVERT(nvarchar(MAX), @now, 14), 14
--15 to 19 not valid
UNION SELECT CONVERT(nvarchar(MAX), @now, 20), 20
UNION SELECT CONVERT(nvarchar(MAX), @now, 21), 21
UNION SELECT CONVERT(nvarchar(MAX), @now, 22), 22
UNION SELECT CONVERT(nvarchar(MAX), @now, 23), 23
UNION SELECT CONVERT(nvarchar(MAX), @now, 24), 24
UNION SELECT CONVERT(nvarchar(MAX), @now, 25), 25
--26 to 99 not valid
UNION SELECT CONVERT(nvarchar(MAX), @now, 100), 100
UNION SELECT CONVERT(nvarchar(MAX), @now, 101), 101
UNION SELECT CONVERT(nvarchar(MAX), @now, 102), 102
UNION SELECT CONVERT(nvarchar(MAX), @now, 103), 103
UNION SELECT CONVERT(nvarchar(MAX), @now, 104), 104
UNION SELECT CONVERT(nvarchar(MAX), @now, 105), 105
UNION SELECT CONVERT(nvarchar(MAX), @now, 106), 106
UNION SELECT CONVERT(nvarchar(MAX), @now, 107), 107
UNION SELECT CONVERT(nvarchar(MAX), @now, 108), 108
UNION SELECT CONVERT(nvarchar(MAX), @now, 109), 109
UNION SELECT CONVERT(nvarchar(MAX), @now, 110), 110
UNION SELECT CONVERT(nvarchar(MAX), @now, 111), 111
UNION SELECT CONVERT(nvarchar(MAX), @now, 112), 112
UNION SELECT CONVERT(nvarchar(MAX), @now, 113), 113
UNION SELECT CONVERT(nvarchar(MAX), @now, 114), 114
UNION SELECT CONVERT(nvarchar(MAX), @now, 120), 120
UNION SELECT CONVERT(nvarchar(MAX), @now, 121), 121
--122 to 125 not valid
UNION SELECT CONVERT(nvarchar(MAX), @now, 126), 126
UNION SELECT CONVERT(nvarchar(MAX), @now, 127), 127
--128, 129 not valid
UNION SELECT CONVERT(nvarchar(MAX), @now, 130), 130
UNION SELECT CONVERT(nvarchar(MAX), @now, 131), 131
--132 not valid
ORDER BY STYLE

这是结果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
output                   STYLE
Apr 28 2014  9:31AM          0
04/28/14                     1
14.04.28                     2
28/04/14                     3
28.04.14                     4
28-04-14                     5
28 Apr 14                    6
Apr 28, 14                   7
09:31:28                     8
Apr 28 2014  9:31:28:580AM   9
04-28-14                     10
14/04/28                     11
140428                       12
28 Apr 2014 09:31:28:580     13
09:31:28:580                 14
2014-04-28 09:31:28          20
2014-04-28 09:31:28.580      21
04/28/14  9:31:28 AM         22
2014-04-28                   23
09:31:28                     24
2014-04-28 09:31:28.580      25
Apr 28 2014  9:31AM          100
04/28/2014                   101
2014.04.28                   102
28/04/2014                   103
28.04.2014                   104
28-04-2014                   105
28 Apr 2014                  106
Apr 28, 2014                 107
09:31:28                     108
Apr 28 2014  9:31:28:580AM   109
04-28-2014                   110
2014/04/28                   111
20140428                     112
28 Apr 2014 09:31:28:580     113
09:31:28:580                 114
2014-04-28 09:31:28          120
2014-04-28 09:31:28.580      121
2014-04-28T09:31:28.580      126
2014-04-28T09:31:28.580      127
28 ????? ??????? 1435  9:31:28:580AM    130
28/06/1435  9:31:28:580AM    131

缩短nvarchar(max)以缩短时间。例如:

1
2
SELECT CONVERT(nvarchar(11), GETDATE(), 0)
UNION SELECT CONVERT(nvarchar(MAX), GETDATE(), 0)

输出:

1
2
May 18 2018
May 18 2018  9:57AM

使用Microsoft Sql Server:

1
2
3
4
5
6
7
8
9
10
--
-- Create test case
--
DECLARE @myDateTime DATETIME
SET @myDateTime = '2008-05-03'

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

请尝试以下操作:

1
CONVERT(VARCHAR(10), [MyDateTimecolumn], 20)

对于一个完整的日期时间,而不仅仅是日期,请执行以下操作:

1
CONVERT(VARCHAR(23), [MyDateTimecolumn], 121)

请参阅此页面以获取转换样式:

http://msdn.microsoft.com/en-us/library/ms187928.aspx
要么
SQL Server CONVERT()函数


SQL Server 2012具有新功能FORMAT:
http://msdn.microsoft.com/en-us/library/ee634924.aspx

并且您可以使用自定义日期时间格式字符串:http://msdn.microsoft.com/zh-cn/library/ee634398.aspx

这些页面暗示它也可以在SQL2008R2上使用,但是我没有一个方便的工具可以测试这种情况。

用法示例(澳大利亚日期时间):

1
FORMAT(VALUE,'dd/MM/yyyy h:mm:ss tt')


您可以使用DATEPART(DATEPART, VARIABLE)。例如:

1
2
3
4
5
6
7
8
DECLARE @DAY INT
DECLARE @MONTH INT
DECLARE @YEAR INT
DECLARE @DATE DATETIME
@DATE = GETDATE()
SELECT @DAY = DATEPART(DAY,@DATE)
SELECT @MONTH = DATEPART(MONTH,@DATE)
SELECT @YEAR = DATEPART(YEAR,@DATE)

CastConvert

Cast的语法:

1
CAST ( expression AS data_type [ (LENGTH ) ])

Convert的语法:

1
CONVERT ( data_type [ ( LENGTH ) ] , expression [ , STYLE ] )

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

实际上,因为您要求一种特定的格式:

1
REPLACE(CONVERT(VARCHAR(10), DATE, 102), '.', '-')

-这使您以'yyyy-mm-dd 00:00:00.000'的格式将时间设置为0

1
SELECT CAST( CONVERT(VARCHAR, GETDATE(), 101) AS DATETIME) ;

使用Microsoft SQL Server:

对CONVERT使用语法:

1
CONVERT ( data_type [ ( LENGTH ) ] , expression [ , STYLE ] )

例:

1
SELECT CONVERT(VARCHAR,d.dateValue,1-9)

对于样式,您可以在这里找到更多信息:MSDN-Cast and Convert(Transact-SQL)。


尝试:

1
SELECT REPLACE(CONVERT(VARCHAR, getdate(), 111),'/','-');

有关MS SQL提示的更多信息


1
2
3
4
5
DECLARE @dt datetime

SET @dt = getdate()

SELECT CONVERT(CHAR(10),@dt,120)

我想要将特定的字符串格式设置为char(10)的固定数据长度。


请尝试以下操作:

1
CONVERT(VARCHAR(10),GetDate(),102)

然后,您需要替换"。"与"-"。

这是一个有帮助的网站
http://www.mssqltips.com/tip.asp?tip=1145


这是我的方法:CONVERT(NVARCHAR(10), DATE1, 103) )


您可以将日期转换为多种格式,语法简单易用:

1
2
CONVERT('TheTypeYouWant', 'TheDateToConvert', 'TheCodeForFormating' * )
CONVERT(NVARCHAR(10), DATE_OF_DAY, 103) => 15/09/2016
  • 代码是整数,这里3是不带世纪的第三种格式,如果您希望世纪只需将代码更改为103。

在您的情况下,我刚刚通过nvarchar(10)转换并限制了大小,如下所示:

1
CONVERT(NVARCHAR(10), MY_DATE_TIME, 120) => 2016-09-15

详情请参见:http://www.w3schools.com/sql/func_convert.asp

另一个解决方案(如果您的日期是日期时间)是一个简单的CAST:

1
CAST(MY_DATE_TIME AS DATE) => 2016-09-15

试试这个SQL:

1
2
SELECT REPLACE(CONVERT(VARCHAR(24),GETDATE(),103),'/','_') + '_'+
       REPLACE(CONVERT(VARCHAR(24),GETDATE(),114),':','_')


对于SQL Server 2008+,可以同时使用CONVERT和FORMAT。

例如,对于欧洲风格(例如德国)的时间戳记:

1
CONVERT(VARCHAR, FORMAT(GETDATE(), 'dd.MM.yyyy HH:mm:ss', 'de-DE'))

OP提到了日期时间格式。对我来说,时间部分阻碍了工作。
我认为在格式化之前删除时间部分(通过将datetime转换为date)会更干净一些。

1
CONVERT( VARCHAR(10), CONVERT( DATE, @yourDate ) , 111 )

最简单的方法是:

1
2
3
DECLARE @now AS DATETIME = GETDATE()

SELECT CONVERT(VARCHAR, @now, 23)

1
2
3
DECLARE @DateTime DATETIME
SET @DateTime = '2018-11-23 10:03:23'
SELECT CONVERT(VARCHAR(100),@DateTime,121 )

您没有说哪个数据库,但是使用mysql这是从时间戳获取日期的简便方法(并且varchar类型转换应自动发生):

1
2
3
4
5
6
7
mysql> SELECT DATE(now());
+-------------+
| DATE(now()) |
+-------------+
| 2008-09-16  |
+-------------+
1 ROW IN SET (0.00 sec)


1
CONVERT(VARCHAR, GETDATE(), 23)

写一个函数

1
2
3
4
5
6
7
CREATE FUNCTION dbo.TO_SAP_DATETIME(@INPUT datetime)
RETURNS VARCHAR(14)
AS BEGIN
    DECLARE @ret VARCHAR(14)
    SET @ret = COALESCE(SUBSTRING(REPLACE(REPLACE(REPLACE(CONVERT(VARCHAR(26), @INPUT, 25),'-',''),' ',''),':',''),1,14),'00000000000000');
    RETURN @ret
END

您没有说什么语言,但是我假设C#/.NET是因为它具有本机DateTime数据类型。在那种情况下,只需使用ToString方法将其转换并使用格式说明符,例如:

1
2
DateTime d = DateTime.Today;
string RESULT = d.ToString("yyyy-MM-dd");

但是,我会提醒您不要在数据库查询中使用它或将其串联到SQL语句中。数据库要求使用特定的格式字符串。如果要这样做,最好将时间部分清零,并使用DateTime作为SQL参数。


推荐阅读

    查询linux内存命令?

    查询linux内存命令?,系统,情况,信息,工具,电脑,状态,命令,内存,发行,总量,查

    linux查询ip命令?

    linux查询ip命令?,地址,网络,信息,设备,系统,电脑,终端,命令,中心,技术指标,l

    linux查询所有命令?

    linux查询所有命令?,工作,地址,系统,命令,信息,目录,工具,基础,文件,内容,lin

    linux日志命令查询?

    linux日志命令查询?,系统,名称,信息,实时,电脑,对比,最新,日志,命令,环境,Lin

    linux文本查询命令?

    linux文本查询命令?,标准,命令,文件,工具,数据,信息,位置,系统,内容,文本,Lin

    命令查询linux包安装?

    命令查询linux包安装?,软件,地方,地址,名字,系统,名称,信息,路径,命令,文件,

    linux变量释放命令?

    linux变量释放命令?,系统,环境,名称,工具,官网,简介,变量,环境变量,命令,内

    查询linux的命令历史?

    查询linux的命令历史?,信息,系统,名称,地址,服务,命令,数据,环境,指令,用户,

    linux线程查询命令?

    linux线程查询命令?,系统,第一,线程,命令,软件,名称,信息,进程,选项,方法,Lin

    linux命令左右查询?

    linux命令左右查询?,系统,信息,管理,地址,工作,命令,文件,单位,位置,数据,lin

    linux简单查询命令?

    linux简单查询命令?,地址,命令,信息,设备,电脑,系统,工作,文件,终端,内容,Lin

    linux线程查询命令?

    linux线程查询命令?,系统,第一,线程,命令,软件,名称,信息,进程,选项,方法,Lin

    linux命令左右查询?

    linux命令左右查询?,系统,信息,管理,地址,工作,命令,文件,单位,位置,数据,lin

    linux简单查询命令?

    linux简单查询命令?,地址,命令,信息,设备,电脑,系统,工作,文件,终端,内容,Lin

    查询linux配置的命令?

    查询linux配置的命令?,系统,网络,地址,情况,信息,电脑,中科,状态,服务,命令,

    查询linux配置的命令?

    查询linux配置的命令?,系统,网络,地址,情况,信息,电脑,中科,状态,服务,命令,

    linux命令查询时间?

    linux命令查询时间?,时间,系统,状态,信息,数据,标准,地址,平台,环境,命令,在w

    linux调出变量的命令?

    linux调出变量的命令?,系统,工作,工具,信息,地址,代码,标准,名称,官网,命令,l

    linux查询翻页命令?

    linux查询翻页命令?,工作,地址,系统,信息,命令,工具,目录,管理,暂停,标准,Lin

    查询linux上调度命令?

    查询linux上调度命令?,系统,策略,实时,信息,状态,时间,进程,电脑,报告,分析,L