如何在临时表中获取SQL结果并在临时表上运行另一个脚本

时间:2019-06-26 22:19:47

标签: mysql sql database

我需要用定界符将一列拆分为多列。因此,我编写了以下脚本及其正常工作。

DECLARE @delimiter VARCHAR(50)
SET @delimiter=',' 
;WITH CTE AS
( 
    SELECT

        [ODC_Number],
        CAST('<M>' + REPLACE([ODC_Number], @delimiter , '</M><M>') + '</M>' AS XML) 
        AS [Employee Name XML]
    FROM  tbl_ODC_Number 
)
SELECT

     [ODC_Number] as ODC_Number,
     [Employee Name XML].value('/M[1]', 'varchar(50)') As [ODC_Number1],
     [Employee Name XML].value('/M[2]', 'varchar(50)') As [ODC_Number2],
     [Employee Name XML].value('/M[3]', 'varchar(50)') As [ODC_Number3]

FROM CTE

现在,我需要知道如何在临时表中获得此结果并运行以下脚本来检查每个新列的格式,以确保每个列数据的格式正确:

格式:

ODC-XXXX-XXX-XXXXXX   ODC-2018-076-895689
  • 每个值的长度应为19位数字
  • 仅从ODC开始
  • 检查除逗号以外是否还有其他定界符

因此,我编写了以下代码(需要为每一列编写)

Select * from TEMPDB
Where

Len (ODC_Number1) < '19' or
ODC_Number1 not like '%[CRI]-[0-9][0-9][0-9][0-9]-[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9]%' or
ODC_Number1  like '%[CRI]-[0-9][0-9][0-9][0-9]-[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9]-[CRI]-[0-9][0-9][0-9][0-9]-[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9]%' or
ODC_Number1 like '%[%*$#@;&/.\ ]%' or
ODC_Number1 not like '[CRI]%' or
ODC_Number1 like '%-CRI%'

我还处于非常基本的SQL级别。如果有人可以帮助我让我一起努力,我将不胜感激。 非常感谢。

我已经写了这两个脚本,但是不知道如何组合它们

1 个答案:

答案 0 :(得分:0)

要将数据放入临时表中,只需执行SELECT * INTO #Temp FROM CTE

DECLARE @delimiter VARCHAR(50)
SET @delimiter=',' 
;WITH CTE AS
( 
    SELECT

        [ODC_Number],
        CAST('<M>' + REPLACE([ODC_Number], @delimiter , '</M><M>') + '</M>' AS XML) 
        AS [Employee Name XML]
    FROM  tbl_ODC_Number 
)
SELECT

     [ODC_Number] as ODC_Number,
     [Employee Name XML].value('/M[1]', 'varchar(50)') As [ODC_Number1],
     [Employee Name XML].value('/M[2]', 'varchar(50)') As [ODC_Number2],
     [Employee Name XML].value('/M[3]', 'varchar(50)') As [ODC_Number3]

       INTO #Temp
FROM CTE

现在为您的检查执行用OR分隔的每一列的代码。

Select * 
from #Temp
Where
(
Len (ODC_Number1) < '19' or
ODC_Number1 not like '%[CRI]-[0-9][0-9][0-9][0-9]-[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9]%' or
ODC_Number1  like '%[CRI]-[0-9][0-9][0-9][0-9]-[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9]-[CRI]-[0-9][0-9][0-9][0-9]-[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9]%' or
ODC_Number1 like '%[%*$#@;&/.\ ]%' or
ODC_Number1 not like '[CRI]%' or
ODC_Number1 like '%-CRI%'
)
OR 
(
Len (ODC_Number2) < '19' or
ODC_Number2 not like '%[CRI]-[0-9][0-9][0-9][0-9]-[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9]%' or
ODC_Number2  like '%[CRI]-[0-9][0-9][0-9][0-9]-[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9]-[CRI]-[0-9][0-9][0-9][0-9]-[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9]%' or
ODC_Number2 like '%[%*$#@;&/.\ ]%' or
ODC_Number2 not like '[CRI]%' or
ODC_Number2 like '%-CRI%'
)
OR 
(...... You get the idea....