Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.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,问题: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)))
    。不幸的是,其中任何一个都返回一个
    日期
    ,而不是
    数字
    ,因此它不能回答您的问题。您可能还对它感兴趣。