我正在try 删除字母表、左、右和中间的空格、前面的零以及特殊字符之后的所有字符(逗号、分号、反斜杠、正斜杠)

我有一个包含如下值的列:

051 765 999
MK00564123
KJ786453425/9
432563542/3
096745632
53452BMG441,8

我正在try 从值中包含字母且在0之前的值中删除从左到右的字母和空格.

Expected Output:个个

51765999
564123
96745632

另外,我正在try 删除列中特殊字符之后的所有内容(逗号、分号、反斜杠、正斜杠):

Expected Output:个个

786453425
432563542
53452441

Final Output:

51765999
564123
96745632
786453425
432563542
53452441

我已经创建了小提琴,但没有得到预期的输出,如下所示:

enter image description here

菲德尔:http://sqlfiddle.com/#!18/0b383/1123

有人能帮我找出问题所在吗?我怎样才能获得预期的输出?

推荐答案

做到这一点的一种方法是

CREATE FUNCTION dbo.udf_GetCleanedAlphaNumeric (@alphanumeric VARCHAR(100))
RETURNS TABLE
AS
    RETURN
      (SELECT SUBSTRING(cleaned, PATINDEX('%[^0]%', cleaned + 'x'), 8000) AS Final
       FROM   (VALUES (SUBSTRING(@alphanumeric, 1, PATINDEX('%[,;\/]%', @alphanumeric + ';') - 1))) ca1(prefix)
              CROSS APPLY (VALUES ( REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
                                    REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
                                    REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
                                    REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
                                    REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
                                    REPLACE(REPLACE(prefix, ' ', ''), 'a', '')
                                    , 'b', ''), 'c', ''), 'd', ''), 'e', ''), 'f', '')
                                    , 'g', ''), 'h', ''), 'i', ''), 'j', ''), 'k', '')
                                    , 'l', ''), 'm', ''), 'n', ''), 'o', ''), 'p', '')
                                    , 'q', ''), 'r', ''), 's', ''), 't', ''), 'u', '')
                                    , 'v', ''), 'w', ''), 'x', ''), 'y', ''), 'z', '') )) ca2(cleaned)) 

然后

SELECT alphanumeric,
       Final
FROM   temp
CROSS APPLY dbo.udf_GetCleanedAlphaNumeric(alphanumeric)
  • 首先提取任意,;\/之前的子字符串(如果存在)
  • 然后go 掉所有字母或空格(在以后的版本中可以更简洁地使用TRANSLATE功能,就像在编辑历史记录中一样)
  • 然后删除前导零

(DB Fiddle)

Sql相关问答推荐

在SQL Server中使用LEFT连接包含特定记录

使用SQL/R循环查找邻居

SQL将 Select 查询作为新列添加到另一个 Select 查询

仅在特定字符串之后提取两个圆括号之间的计量单位文本

如何从JSON数组中 Select 多个值

根据Rails活动记录中时间戳/日期时间的时间部分从PostgreSQL中提取记录

SQL按日期分组字段和如果日期匹配则求和

在xml.Modify方法中使用子字符串和可能的替代方法

提取连续时间戳范围的SQL

postgres中的条件索引和触发器

统计PostgreSQL中前10个最大大小表的行数

每个分组最多 Select 最后 2 个值并并排显示它们

给定 3 个键列,从一个表中 Select 另一表中不存在的所有数据

使用 SQL 计算一年中任意 3 个月期间的总成本

如何在TSQL中编写此窗口查询

正则表达式:停在第一个匹配的其中一个字符位置上

使用给定的变量对在循环中执行更新语句

按 15 分钟递增计数分组,包括 0 计数

ACCESS SQL - 有没有办法使用通配符仅 Select 字段的特定部分?

Lag() 获取snowflake的值变化