我有一个类型为“nvarchar”的列,其中一些值包含特殊字符。我想要做的是,如果值以特殊字符开头,则执行一个函数以删除该字符,否则按原样返回值。示例数据如下:
| 识别号|金额|
| - ------|- ------|
| 1个|九九九点零九分|
| 第二章|三百三十九点五八至三百三十九点五八|
| 三个|二千一百四十一点一至二千零五十五点七二至三百五十七点六|
| 四个|五百一十九点三二元至五百一十九点三二元|
| 五个|六百六十一点八四至六百六十一点八四|
| 六个|八百四十三点五九元至八百四十三点五九元|
我尝试使用'STUFF'函数来替换一个特殊字符,只要一个值以它开头。
SELECT ID,
STUFF (Amount, 1, 1, '') AS Test,
FROM table
我为个人价值工作。
但是当我使用CASE语句将其应用于整列时(因为不是所有的值都以特殊字符开头),我无法将特殊字符合并到LIKE操作符中。
SELECT ID,
CASE
WHEN Amount LIKE N'%'
THEN (STUFF (Amount, 1, 1, ''))
ELSE Amount
END AS Test,
FROM table
预期结果:
| 识别号|金额|试验|
| - ------|- ------|- ------|
| 1个|九九九点零九分|九百九十九点零九至九百九十九点零九|
| 第二章|三百三十九点五八至三百三十九点五八|三百三十九点五八至三百三十九点五八|
| 三个|二千一百四十一点一至二千零五十五点七二至三百五十七点六|二千一百四十一点一至二千零五十五点七二至三百五十七点六|
| 四个|五百一十九点三二元至五百一十九点三二元|五百一十九点三二至五百一十九点三二|
| 五个|六百六十一点八四至六百六十一点八四|六百六十一点八四至六百六十一点八四|
| 六个|八百四十三点五九元至八百四十三点五九元|八百四十三点五九至八百四十三点五九|
数据如下所示:
3条答案
按热度按时间bt1cpqcv1#
由于您的数据是数字或特殊字符,您可以只检查它 * 而不是 * 是一个数字:
shstlldc2#
可以按如下方式丢失 other 字符:
输出:
| 金额|新编号|
| - ------|- ------|
| 三百三十九点五八英镑三百三十九点五八英镑|三百三十九点五八|
| 519.32英镑519.32英镑|29.312539.15美元|
| 六百六十一点八四英镑六百六十一点八四英镑|66.186468.14美元|
| 八百四十三点五九英镑八百四十三点五九英镑|93.549853.48美元|
| 999.09英镑999.09英镑|九九九九零。九九九九九零。九|
| 2141.1到2055.72到357.6之间|27357.6.55021.1421|
参见:DBFIDDLE
注意:
NewNumber
仍然不是数字!它只包含数字和/或.“”和/或,“”。z9smfwbn3#
您可以使用TRIM -对于SQL Server 2019及更低版本,TRIM将删除前导和尾随字符。对于SQL Server 2022,您可以指定前导/尾随/两者:
样本数据:
SQL服务器2017:
SQL服务器2022: