Can';t使用replace函数删除SQL表上的空白
我收到了一个csv文件,其中有一列名为“Amount”,在我的表中应该是货币类型。 我采取的第一步是按原样加载csv文件。因此,我的表使用字符串类型来表示Amount列,因为我知道它在源上不会被格式化为money。由于该列上有一些空格,我无法将NVARCHAR转换为MONEY 以下是初始表结构:Can';t使用replace函数删除SQL表上的空白,sql,sql-server,replace,type-conversion,Sql,Sql Server,Replace,Type Conversion,我收到了一个csv文件,其中有一列名为“Amount”,在我的表中应该是货币类型。 我采取的第一步是按原样加载csv文件。因此,我的表使用字符串类型来表示Amount列,因为我知道它在源上不会被格式化为money。由于该列上有一些空格,我无法将NVARCHAR转换为MONEY 以下是初始表结构: CREATE TABLE #TestReplace ( Amount NVARCHAR(100) ) 以下是客户端作为列的值插入的内容的示例: INSERT INTO #TestReplace
CREATE TABLE #TestReplace (
Amount NVARCHAR(100)
)
以下是客户端作为列的值插入的内容的示例:
INSERT INTO #TestReplace VALUES('2 103.74')
因为该字符串中有一个空格,所以我需要删除它,以便将其转换为MONEY类型
但是,如果我尝试REPLACE-SQL函数,则什么也不会发生。就好像这个值没有改变一样
SELECT REPLACE(Amount, ' ','') FROM #TestReplace
replace命令后的金额仍然为:2 103.74
我是否遗漏了一些无法抓住数字2后面空格的内容?有没有更好的方法来消除这个空间,并将NVARCHAR转换为货币
感谢所有的帮助 您的角色不是空格,但看起来像空格。如果使用的是8位ASCII字符,则可以确定该值使用的是什么:
select ascii(substring(amount, 2, 1))
如果这是一个nvarchar()
(如您的示例所示):
一旦知道字符是什么,就可以替换它。要添加到Gordon的答案中,一旦知道整数ASCII/Unicode值,就可以在替换函数中使用CHAR()和NCHAR()函数,如下所示:
--For ASCII:
REPLACE(Amount, CHAR( /*int value*/ ), '')
--For Unicode:
REPLACE(Amount, NCHAR( /*int value*/ ), '')
成功了!谢谢大家!@卡米兰里克。接受问题的答案是一个很好的做法。很好,感谢您将此添加到以前的答案中。非常感谢。
--For ASCII:
REPLACE(Amount, CHAR( /*int value*/ ), '')
--For Unicode:
REPLACE(Amount, NCHAR( /*int value*/ ), '')