如何清除/删除SQL Server中的隐藏字符或特殊字符列?
问题:如何清除/删除SQL Server中的隐藏字符或特殊字符列?,sql,sql-server,tsql,Sql,Sql Server,Tsql,问题:COMPLETE\u DATE列的类型为varchar(它是这样加载的,我无法更改),我需要将其转换为数值数据类型以进行操作。日期格式为yyyy-mm-dd 运行convert函数时,出现以下错误: 将数据类型varchar转换为数字时出错 解决方案尝试1:我运行了LEN函数,发现返回的是11,而不是预期的10。起初我认为这可能是额外的空间,所以我 CONVERT(NUMERIC, RTRIM(LTRIM(COMPLETE_DATE))) 但它仍然会出错 解决方案尝试2: CONVERT
COMPLETE\u DATE
列的类型为varchar
(它是这样加载的,我无法更改),我需要将其转换为数值
数据类型以进行操作。日期格式为yyyy-mm-dd
运行convert函数时,出现以下错误:
将数据类型varchar转换为数字时出错
解决方案尝试1:我运行了LEN
函数,发现返回的是11,而不是预期的10。起初我认为这可能是额外的空间,所以我
CONVERT(NUMERIC, RTRIM(LTRIM(COMPLETE_DATE)))
但它仍然会出错
解决方案尝试2:
CONVERT(numeric, REPLACE(LTRIM(RTRIM([COMPLETE_DATE])), ' ', ''))
我正在运行一个来自我的前任的脚本,其中使用convert函数转换此列,但我不确定此时是否有任何额外空间,或者是否隐藏了特殊字符,我还可以做些什么来将列清理为字符串yyy-mm-dd
更新tbl
设置学年=转换(数字,子字符串(完成日期,1,4)+子字符串(完成日期,6,2)+子字符串(完成日期,9,2))时的情况=转换(数字,子字符串(完成日期,1,4)+'0701)
然后转换(数字,子字符串(完成日期,1,4))
ELSE转换(数字,子字符串(完成日期,1,4))-1结束代码>如果格式为YYYY-MM-DD,请尝试:
try_convert(int, replace(academic_year, '-', ''))
我有点困惑,为什么您认为删除空格会影响转换。如果您遇到此问题,我找到了解决此问题的唯一方法。它并不完美,但它是一些回复用户的回复的综合。我继续做了几件事
因为我无法确定它是否是一个额外的隐藏字符空间,所以我继续使用TRY_CONVERT函数转换数据,同时使用RTRIM和LTRIM,但正如建议的那样,我使用了日期数据类型,而不是数字类型,但关键是要将实际日期10替换为子字符串。看起来是这样的
尝试将(date,rtrim(ltrim(子字符串(COMPLETE_date,1,10))转换为COMPLETE_date
这允许删除任何额外的空格或字符,只剩下10个字符,然后将10个字符串转换为日期,问题得到解决
不确定这是否是最好的方法,但它确实对我有效。首先,为什么要将日期存储为varchar
,其次,为什么要将其转换为数值
?有6种日期和时间数据类型,其中5种是更好的选择(只有time
是错误的选择)。使用日期
。您使用的是什么版本的SQL Server?当前支持的函数有TRY\u CONVERT
或TRY\u CAST
函数,该函数将获取您的输入字符串并将其转换为一个DATE
或DATETIME2(n)
,如果转换不起作用,则返回NULL
,而不是一个硬错误(如果您要numeric
(正如其他人所说,这很有问题),您希望转换成什么数字,例如,2021-01-07
?@Larnu我不是DBA,这是他们加载数据的方式。为了避免此错误,我永远不会将其作为varchar加载。如果所有数据的格式都是yyyy-MM-dd
为什么不直接执行更改表dbo.tbl更改列学术年日期;
?该literally解决了所有问题。旁白:有一个函数。你可以使用try\u convert(date,trim(rtrim)(ltrim(SUBSTRING)((COMPLETE\u date),(1),(10ЮЮЮЮЮ)
如果你是按括号对付款的。或者只要try\u convert(date,trim(SUBSTRING(COMPLETE\u date,1,10)))
。不幸的是,其中任何一个都返回一个日期
,而不是数字
,因此它不能回答您的问题。您可能还对它感兴趣。