sql - 在第一个连字符之前填充零并删除空格并添加 BA 和 IN

标签 sql sql-server sql-server-2008

我有如下数据

98-45.3A-22
104-44.0A-23
00983-29.1-22
01757-42.5A-22
04968-37.3A2-23

输出在 SQL Server 中查找如下输出

00098-BA45.3A-IN-22
00104-BA44.0A-IN-23
00983-BA29.1-IN-22
01757-BA42.5A-IN-22
04968-BA37.3A2-IN-23

最佳答案

我拆分了各个部分来应对棘手的数据模板。即使对于非破折号的 2 位尾部,这也应该有效:

WITH Src AS
(
    SELECT * FROM (VALUES
    ('98-45.3A-22'),
    ('104-44.0A-23'),
    ('00983-29.1-22'),
    ('01757-42.5A-22'),
    ('04968-37.3A2-23')
    ) T(X)
), Parts AS
(
    SELECT *,
    RIGHT('00000'+SUBSTRING(X, 1, CHARINDEX('-',X, 1)-1),5) Front,
    'BA'+SUBSTRING(X, CHARINDEX('-',X, 1)+1, 2) BA,
    SUBSTRING(X, PATINDEX('%.%',X), LEN(X)-CHARINDEX('-', REVERSE(X), 1)-PATINDEX('%.%',X)+1)  P,
    SUBSTRING(X, LEN(X)-CHARINDEX('-', REVERSE(X), 1)+1, LEN(X)) En
    FROM Src
)
SELECT Front+'-'+BA+P+'-IN'+En
FROM Parts

它返回:

00098-BA45.3A-IN-22
00104-BA44.0A-IN-23
00983-BA29.1-IN-22
01757-BA42.5A-IN-22
04968-BA37.3A2-IN-23

关于sql - 在第一个连字符之前填充零并删除空格并添加 BA 和 IN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39345780/

相关文章:

sql - 在存储过程的一个 if 语句中评估不同的条件

mysql - 使用另一个 GROUP BY 时选择具有 MAX 值的行

c# - 如何从 C# 中的存储过程中获取设置值

python - 使用表类型的 pyodbc 没有结果

SQL Server - OPENQUERY

sql - 使用 GREATEST 函数避免 NULL 返回值

sql - 如何获取序列中的下一个数字

c# - 无法将 NULL 值插入表 'MaintenanceId' 列 '<tableName>' ;列不允许为空。 INSERT 失败 EF 6.1

tsql - 用于表到表插入的 SSIS 与(仅限 SQL)INSERT INTO () SELECT FROM 方法

sql-server - 当时间戳(rowversion)溢出时会发生什么?