String 如果分号前面没有“0”,则将其替换为“0”;(双引号)
我有一个类似String 如果分号前面没有“0”,则将其替换为“0”;(双引号),string,tsql,replace,str-replace,sql-server-2019,String,Tsql,Replace,Str Replace,Sql Server 2019,我有一个类似“Column”的字符串;“专栏”;“列” 然而,我多次看到: “列”;“列;”;“列” (请注意第二个字段中的额外分号) 是否可以找到分号(;)没有被双引号(“)包围的所有实例,并将其替换为零 类似于替换(@string,[a-z][0-9];”,“”) “列”;“列”;“;“Column”变为“Column”;“Column”;“Column” “值”;“值”;“;“Value”变成“Value”;“Value”;“Value” “某物”;别的东西;“另一个;在不知道表的定义的
“Column”的字符串;“专栏”;“列”
然而,我多次看到:
<代码>“列”;“列;”;“列”
(请注意第二个字段中的额外分号)
是否可以找到分号(;
)没有被双引号(“
)包围的所有实例,并将其替换为零
类似于替换(@string,[a-z][0-9];”,“”)
“列”;“列”;“;“Column
”变为“Column”;“Column”;“Column”
“值”;“值”;“;“Value”
变成“Value”;“Value”;“Value”
“某物”;别的东西;“另一个;在不知道表的定义的情况下,thing“变成了
“某物”;“另一物”
,,这是一个模糊的答案
在SQL Server 2017中(如果我没有记错的话),对CSV格式的支持被添加到大容量插入中,这意味着您可以同时指定列分隔符、行分隔符和引号标识符。对于上述内容,这意味着您的字段终止符将需要值;“
,而字段引号将需要值”
。然而,这将留下剩余的代码>用双引号括起来的字符
因此,我建议创建一个staging表,其中所有列都是(n)varchar
,批量插入
您的数据到该表中,然后插入
数据到生产表中,使用替换
操作符删除剩余的代码>字符并强键入它们
在伪SQL中,这看起来像这样:
BULK INSERT Staging.YourTable
来自“C:\YourFilePath\YourFile.txt”
使用(FORMAT='CSV',
FIELDQUOTE=“”,
字段终止符=';');
插入Production.YourTable(第1列、第2列、第3列、第4列)
选择“替换”(第1列“;”、“”),
尝试转换(int,REPLACE(Column2,,;,,,,),
尝试转换(日期,替换(第3列“;”,“”),103),
替换(第4列“;”,“”)
从Staging.YourTable;
不确定这是否过于简单化,但如果您真的将该字符串放在@string中,那么我看不出有任何理由不起作用:
replace(@string, ';";"', '";"')
你需要正则表达式才能正确地做到这一点,TSQL在这方面不是很在行。这意味着?在我的TSQL脚本之外?或者使用内联代码?最好是在外部,但如果你想沿着这条路走下去,你可以使用SQLCLR函数你的问题,@Henrov…恕我直言,除非你的问题解释了真正的问题是什么,否则没有什么意义进入聊天,信息应该是在问题,而不是聊天。虽然我已经回答了这个问题的基础上,我认为你是问。这就假定分号不能出现在中间的价值,最后一个“列”将不包含分号。