leading-zero - 删除以“。”分隔的每个部分的前导零 除了当“.0”。
问题描述
在 TSQL 中,我需要创建一个脚本来删除 '.' 之间的所有前导零,从字符串中的第一个 0 开始,除非有 '.0'。任务编号中间的任何位置。当任务号没有 EX: 111.0.123.234 时,我到目前为止做得很好,但我似乎无法弄清楚 SUBSTRING/CHARINDEX/PATINDEX 等的组合来删除所有前导零,除非零是唯一的'.' 之间的数字 请参阅随附的屏幕截图和脚本/部分结果作为示例。
这是我的脚本:
SELECT TASKPRODUCTID, (CASE WHEN TASKPRODUCTID NOT LIKE '%.0.%' THEN
REPLACE(LTRIM(REPLACE(TASKPRODUCTID,'0','')),' ','0') ELSE
SUBSTRING(TASKPRODUCTID, PATINDEX('%[^0 ]%', TASKPRODUCTID + ' '), LEN(TASKPRODUCTID))
END) AS NewTaskProductID
FROM TASK
这是部分结果集:
TASKPRODUCTID NewTaskProductID
003.007.002.001 3.7.2.1
003.007.002.003 3.7.2.3
004.003.003.008.0.2017275.132925 4.003.003.008.0.2017275.132925
004.005.001.003 4.5.1.3
004.005.004.004.0.2017275.135139 4.005.004.004.0.2017275.135139
004.005.007.005.0.2017275.140304 4.005.007.005.0.2017275.140304
002.001.002 2.1.2
002.004 2.4
016.010 16.1
屏幕截图 突出显示的行中的前导零示例在下一个小数部分仍然有前导零
谢谢!!
解决方案
您可以尝试使用STUFF()来获取 .0。在其他情况下
declare @s AS varchar(100) = '0010.0.005.006025'
print stuff(REPLACE(LTRIM(REPLACE(@s,'0','0')),'0','*'),
patindex('%.*.%',REPLACE(LTRIM(REPLACE(@s,'0','0')),'0','*')), 3,'.-.')
输出
**1*.-.**5.**6*25
现在将此视为第一种情况;唯一的区别是我们得到了 '*' 而不是 '0'
推荐阅读
- hibernate - 构建/码头化具有数据库连接的springBoot应用程序的最佳实践是什么?
- ios - 在 iOS 中以编程方式实现指南访问
- php - PHP 和魔术方法进入自己的类
- css - 如何使用 OpenStreetMap 和 OpenLayers 应用 css
- sql - Parse below XML in Sql Server
- c# - 颜色 TextBlock 取决于枚举值
- css - 应用的动画不在 IE 11 中运行
- javascript - JavaScript 检查是否在网页上测试然后重定向
- onvif - CreateOSD 响应中没有详细信息
- wso2is - WSO2 中新创建的声明对 SP 不可见