Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 将varchar转换为日期ddmmyyyy时出错_Sql_Sql Server_String_Tsql_Date - Fatal编程技术网

Sql 将varchar转换为日期ddmmyyyy时出错

Sql 将varchar转换为日期ddmmyyyy时出错,sql,sql-server,string,tsql,date,Sql,Sql Server,String,Tsql,Date,我有一个varchar列,格式为ddmmyyyy,我正在尝试将其转换为dd-mm-yyy格式的日期。我正在使用下面的查询,但得到错误: 从字符串转换日期和/或时间时,转换失败 要将字符串转换为日期,只需[尝试]cast()它;SQL Server通常具有足够的灵活性,可以自行确定格式: try_cast(newdate as date) 如果要将其转换回目标格式的字符串,则可以使用format(): 与纯字符串操作相比,try_cast()/format()方法的优点在于,它可以验证该字符串是

我有一个
varchar
列,格式为ddmmyyyy,我正在尝试将其转换为dd-mm-yyy格式的日期。我正在使用下面的查询,但得到错误:

从字符串转换日期和/或时间时,转换失败


要将字符串转换为日期,只需
[尝试]cast()
它;SQL Server通常具有足够的灵活性,可以自行确定格式:

try_cast(newdate as date)
如果要将其转换回目标格式的字符串,则可以使用
format()


与纯字符串操作相比,
try_cast()
/
format()
方法的优点在于,它可以验证该字符串是否是过程中的有效日期。

如果没有日期,就有字符串。因此,您可以使用字符串操作:

select stuff(stuff(newdate, 5, 0, '-'), 3, 0, '-')
如果要转换为日期,可以执行以下操作:

select convert(date, concat(right(newdate, 4), substring(newdate, 3, 2), left(newdate, 2)))
然后,您可以根据需要格式化此文件


但是,不应将值转换为日期。您首先应该将其存储为日期。

必须与其他人达成一致。首先,为什么要将日期存储为字符串?非标准格式,不少于?这里有一种方法,但您确实应该修复数据模型。将日期存储为日期

DECLARE @badIdea table (dt char(8));

INSERT @badIdea(dt) VALUES('21052020');

SELECT newdate = TRY_CONVERT(date, RIGHT(dt,4) + SUBSTRING(dt,3,2) + LEFT(dt,2))
  FROM @badIdea;
BTW 105无法工作,因为它需要破折号。这项工作:

SELECT CONVERT(date, '21-05-2020', 105);

这也是一个糟糕的格式,因为谁知道07-08-2020是7月8日还是8月7日。但至少SQL Server支持这一点。您当前的选择并非如此。

SQL不会以不同的格式存储日期数据类型,因此尝试并调整这种格式可能不是一个好主意

但是,如果您希望结果集仅以不同的格式显示日期,那么您的做法是正确的。您只需要将日期数据类型转换为字符串

SELECT  *
        , COALESCE ( TRY_CONVERT ( CHAR(10), newdate, 105 ), CONVERT ( CHAR(10), newdate ) ) 
FROM    mydate

日期在SQL Server中没有格式,它们存储在内部表示形式中。
SELECT CONVERT(date, '21-05-2020', 105);
SELECT  *
        , COALESCE ( TRY_CONVERT ( CHAR(10), newdate, 105 ), CONVERT ( CHAR(10), newdate ) ) 
FROM    mydate