从dd / mm / yyyy字符串SQL转换为Date

时间:2017-09-11 11:49:08

标签: sql datetime type-conversion

我目前有一个格式dd/mm/yyyy的字符串,我试图将其转换为SQL中的日期时间变量。

我目前正在使用此SQL语句:

CONVERT(datetime, ProposedTransferDate.AttributeValue, 101)

但是我收到了错误:

  

将varchar数据类型转换为日期时间数据类型会导致超出范围的值。

谢谢

克里斯

4 个答案:

答案 0 :(得分:6)

你应该使用掩码103

CONVERT(datetime,ProposedTransferDate.AttributeValue, 103)

this TechOnTheNet article我们发现掩码103具有以下格式:

  

dd / mm / yy(英国/法国标准)

答案 1 :(得分:1)

使用字符串操作将其转换为yyyy-mm-dd格式:

CAST(
    RIGHT(ProposedTransferDate.AttributeValue,4) +
    '-' +
    RIGHT(LEFT(ProposedTransferDate.AttributeValue,5),2) +
    '-' +
    LEFT(ProposedTransferDate.AttributeValue,2)
AS DATETIME)

答案 2 :(得分:0)

转换错误是由于您的日期列不是标准且唯一的SQL / ISO日期格式,即YYYY-MM-DD。您的日期格式可能是MM / DD / YYYY,因此如果您的登录默认语言UK表示日期格式将类似于DD / MM / YYYY.So转换前您想要更改SQL SERVER中的默认语言。This link to show types of languages and learn about SET LANGUAGE(TSQL)

EG

SET LANGUAGE 'british english'    
select convert(date,GETDATE(),103)         ------------use date then it show only date

你也可以用另一种方式

  SET LANGUAGE 'british english'
select DATEPART(dd,'2-3-2012')+ '/' + DATEPART(mm,'2-3-2012')+ '/' + DATEPART(yy,'2-3-2012')

SET LANGUAGE 'british english'
select CONCAT(DATEPART(dd,'2-3-2012'), '/' , DATEPART(mm,'2-3-2012'), '/' ,DATEPART(yy,'2-3-2012'))   

答案 3 :(得分:0)

试试这个:

SELECT convert(datetime, '23/10/2016', 103) 

结果: 2016-10-23 00:00:00.000