Return 只有 t-sql 列中的数值

Return only numeric values from column in t-sql

我得到了比较两条记录的要求: 我的 table 就像;

EmpNo payband              ContractType
123   band 4               permanent
124   band 4               contract
125   band 3               permanent
125   band 4               permanent
125   band 5 reviewbody    permanent

现在我想过滤重复记录,我的第一个条件是ContractType='permanent',然后按高频段过滤。在上面 table EmpNo 125 是一名雇员和相同的合同类型我想按高薪带过滤他的记录。 payband column

有点乱

我想要这样的输出:

EmpNo payband   ContractType
123   band 4    permanent
125   band 5    permanent

有什么帮助吗?谢谢

我添加了逻辑,如果没有数值,那么任何第一个波段都会输出:

DECLARE @t TABLE
    (
      EmpNo INT ,
      payband NVARCHAR(MAX) ,
      ContractType NVARCHAR(MAX)
    )

INSERT  INTO @t
VALUES  ( 123, 'band 4', 'permanent' ),
        ( 124, 'band 4', 'contract' ),
        ( 125, 'band 3', 'permanent' ),
        ( 125, 'band 4 review body', 'permanent' ),
        ( 128, 'band', 'permanent' );

WITH    cte1
          AS ( SELECT   EmpNo ,
                        payband ,
                        ContractType ,
                        PATINDEX('%[0-9]%', payband) AS pi ,
                        CHARINDEX(' ', payband, PATINDEX('%[0-9]%', payband)) AS ci
               FROM     @t
               WHERE    ContractType = 'permanent'
             ),
        cte2
          AS ( SELECT   * ,
                        ROW_NUMBER() OVER ( PARTITION BY EmpNo ORDER BY CASE
                                                              WHEN pi > 0
                                                              THEN CAST(SUBSTRING(payband,
                                                              pi, ABS(pi - ci)) AS INT)
                                                              ELSE 0
                                                              END DESC ) AS rn
               FROM     cte1
             )
    SELECT  EmpNo ,
            payband ,
            ContractType
    FROM    cte2
    WHERE   rn = 1

输出:

EmpNo   payband             ContractType
123     band 4              permanent
125     band 4 review body  permanent
128     band                permanent