如何将varchar转换为日期格式

时间:2018-09-05 14:55:09

标签: sql sql-server tsql

我想将我的字段(dateVar = '08 / 2018')转换为实际日期字段。实际上我只有几个月和几年,所以我只需要像一天一样添加01。 我的最终结果应该是2018-08-01。

CREATE TABLE dateTable (
    dateVar varchar(10)
);

insert into dateTable (dateVar)
values('08/2018'),('01/2015');

我用它来转换为日期,但不起作用

SELECT CONVERT(date, dateVar, 103) FROM dateTable

3 个答案:

答案 0 :(得分:3)

您可以串联丢失的01

SELECT CONVERT(date, '01/'+dateVar, 103)
FROM tab

DBFiddle Demo

为避免用户输入不正确的问题,可以使用TRY_CONVERT。如果发生转换错误,它将返回NULL

答案 1 :(得分:2)

您应该对日期使用标准格式:

insert into dateTable (dateVar)
    values('2018-08-01'), ('2015-01-01');

连字符是ISO标准和大多数数据库中的标准。它几乎总是可以在SQL Server中正常工作,但是真正的SQL Server标准删除了连字符-'20180801''20150101'

然后应声明该表具有该列的日期:

CREATE TABLE dateTable (
    dateVar date
);

如果需要以特定格式查看它,请使用计算变量:

CREATE TABLE dateTable (
    dateVar date,
    date_mmyyyy as (right(convert(varchar(10), dateVar, 103), 7))
);

然后date_mmyyyy会显示您希望看到的值。

答案 2 :(得分:0)

技巧只是将字符串转换为YYYYMMDD格式并将其强制转换。

cast(right(dateVar,4) + left(dateVar,2) + '01' as date)