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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.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 Server中函数的强制转换和转换_Sql_Sql Server_Tsql - Fatal编程技术网

SQL Server中函数的强制转换和转换

SQL Server中函数的强制转换和转换,sql,sql-server,tsql,Sql,Sql Server,Tsql,我正在尝试将dd.mm.yyyy转换为yyy-mm-dd select convert(date,CAST(WEEK_DATE as nvarchar(220)), 120) from z_fact 错误 味精241,第16级,状态1,第1行 从字符串转换日期和/或时间时,转换失败 如何解决此问题?由于您的日期实际上是文本,您必须首先使用convert将其转换为真实日期。然后,在该日期再次使用CONVERT,生成所需的文本输出 SELECT CONVERT(varchar(20), CONV

我正在尝试将
dd.mm.yyyy
转换为
yyy-mm-dd

select convert(date,CAST(WEEK_DATE as nvarchar(220)), 120) 
from z_fact
错误

味精241,第16级,状态1,第1行
从字符串转换日期和/或时间时,转换失败


如何解决此问题?

由于您的日期实际上是文本,您必须首先使用
convert
将其转换为真实日期。然后,在该日期再次使用
CONVERT
,生成所需的文本输出

SELECT CONVERT(varchar(20), CONVERT(datetime, '15.03.18', 4), 120);


请注意,将日期存储为文本通常是不好的做法。希望你能用我的答案整理一下你的桌子。例如,您可以添加一个新的日期时间列
new\u dt
,然后使用以下命令更新它:

UPDATE yourTable
SET new_dt = CONVERT(datetime, old_dt, 4);
不要担心SQL Server使用的内部格式。如果仍然需要显示输出,请再次使用转换,就像我在第一次查询中所做的那样。

您可以尝试以下操作:

declare @dt NVARCHAR(12) = '15.03.18' 
SELECT  CONVERT(DATE,@dt,3)
GO

周日期的类型是什么?您能给我们展示一下示例数据吗?例如:15.03.18(格式为dd.mm.yy)nvarchar是周日期的类型您应该从中吸取的教训是将日期存储为日期时间,而不是字符串。谢谢,我想将一周中的所有日期从dd.mm.yyyy转换为yyyy-mm-dd。复制您的代码时,我会错误地单击。我没有否决您的答案,但格式中的
3
样式需要
/
而不是
作为日期分隔符。您想改用
4
转换(日期@dt,4)。即使你的代码有效,充其量也只是部分答案。谢谢,我想将week_date列中的所有日期从dd.mm.yyyy转换为yyyy-mm ddNo。不要担心日期的内部格式,只需存储为日期、句点。@TimBiegeleisen。。。我建议在对话时指定varchar的长度。“注意,将日期存储为文本通常是不好的做法。”我认为这总是一个坏主意。。。即使您处理的日期超出了
DateTime2
(A.D或9999之后)的范围,最好将日期存储为数字(就像SQL Server内部所做的那样)而不是字符串。另外,我不建议使用
datetime
,但建议使用
datetime2
-。尽管如此,这仍然是一个可靠的答案,因此+1。@Zoharped在某些数据库中,例如SQLite,没有正式的日期类型,因此文本是存储日期的唯一选项。在这里,文本日期必须采用ISO格式,以便正确排序和比较,这一点至关重要。与SQL Server不太相关,但只想提一提。