T-SQL сравнивает число с подстрокой с дополненным числом - PullRequest
0 голосов
/ 15 марта 2012

Проблема в том, что COLA имеет добавленные 0s

Что я пытаюсь сделать, это проверить COLB, COLC, COLD, COLE, COLF с COLA

Или я сделал этоНеправильный путь!

Как получить COLB, COLD для сравнения числа (int) с подстрокой с добавленным номером?


Пример, который является правильным

COLB    COLC    COLD    COLE    COLF               COLA

1        DD      5       1       0                     should = 01DD000510

ни один из этих

COLB   COLC   COLD  COLE   COLF    COLA

50     AA     230   2       0        0
50     AC     600   3       0
50     AG     740   2       0        50AE074020
50     AS     240   3       0        *0AS024030

 -- select that does not work statement.

 SELECT COLA ,
        COLB ,
        SUBSTRING(COLA, 1, 2) AS 'BLC_COLB' ,
        COLC ,
        SUBSTRING(COLA, 3, 2) AS 'BLC_COLC' ,
        COLD ,
        SUBSTRING(COLA, 5, 4) AS 'BLC_COLD' ,
        COLE ,
        SUBSTRING(COLA, 9, 1) AS 'BLC_COLE' ,
        COLF ,
        SUBSTRING(COLA, 10, 1) AS 'BLC_COLF'
 FROM   ATABLE
 WHERE  SUBSTRING(COLA, 1, 2) NOT LIKE COLB
        OR SUBSTRING(COLA, 3, 2) NOT LIKE COLC
        OR SUBSTRING(COLA, 5, 4) NOT LIKE COLD
        OR SUBSTRING(COLA, 9, 1) NOT LIKE COLE
        OR SUBSTRING(COLA, 10, 1) NOT LIKE COLF

--create table and data script

 CREATE TABLE [dbo].[ATABLE]
    (
      [ROWVERSION] [bigint] NULL ,
      [ROWDATE] [datetime] NULL ,
      [COLB] [int] NOT NULL ,
      [COLC] [nvarchar](2) NOT NULL ,
      [COLD] [int] NOT NULL ,
      [COLE] [nvarchar](1) NOT NULL ,
      [COLF] [int] NOT NULL ,
      [COLA] [nvarchar](14) NULL ,
      CONSTRAINT [CON1_0] PRIMARY KEY CLUSTERED
        ( [COLB] ASC, [COLC] ASC, [COLD] ASC, [COLE] ASC, [COLF] ASC )
        WITH ( PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
               IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
               ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 70 ) ON [PRIMARY]
    )
 ON [PRIMARY]

    GO
 SET NUMERIC_ROUNDABORT OFF
GO
 SET ANSI_PADDING, ANSI_WARNINGS, CONCAT_NULL_YIELDS_NULL, ARITHABORT, QUOTED_IDENTIFIER, ANSI_NULLS, NOCOUNT ON
GO
 SET DATEFORMAT YMD
GO
 SET XACT_ABORT ON
GO
 SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
GO
 BEGIN TRANSACTION

-- Add 5 rows to [dbo].[ATABLE] with non-unique comparison key
 SET ROWCOUNT 1
 INSERT INTO [dbo].[ATABLE]
        ( [COLB] ,
          [COLC] ,
          [COLD] ,
          [COLE] ,
          [COLF] ,
          [ROWVERSION] ,
          [ROWDATE] ,
          [COLA]
        )
 VALUES ( 1 ,
          N'DD' ,
          5 ,
          N'1' ,
          0 ,
          327520493236000002 ,
          '2011-07-04 10:21:33.227' ,
          N'01DD000510'
        )
 INSERT INTO [dbo].[ATABLE]
        ( [COLB] ,
          [COLC] ,
          [COLD] ,
          [COLE] ,
          [COLF] ,
          [ROWVERSION] ,
          [ROWDATE] ,
          [COLA]
        )
 VALUES ( 50 ,
          N'AA' ,
          230 ,
          N'2' ,
          0 ,
          327520514140000004 ,
          '2011-07-28 09:47:41.013' ,
          N'0'
        )
 INSERT INTO [dbo].[ATABLE]
        ( [COLB] ,
          [COLC] ,
          [COLD] ,
          [COLE] ,
          [COLF] ,
          [ROWVERSION] ,
          [ROWDATE] ,
          [COLA]
        )
 VALUES ( 50 ,
          N'AC' ,
          600 ,
          N'3' ,
          0 ,
          327520523360000007 ,
          '2011-07-28 09:48:09.577' ,
          N''
        )
 INSERT INTO [dbo].[ATABLE]
        ( [COLB] ,
          [COLC] ,
          [COLD] ,
          [COLE] ,
          [COLF] ,
          [ROWVERSION] ,
          [ROWDATE] ,
          [COLA]
        )
 VALUES ( 50 ,
          N'AG' ,
          740 ,
          N'2' ,
          0 ,
          327520543671000002 ,
          '2011-07-28 09:47:03.773' ,
          N'50AE074020'
        )
 INSERT INTO [dbo].[ATABLE]
        ( [COLB] ,
          [COLC] ,
          [COLD] ,
          [COLE] ,
          [COLF] ,
          [ROWVERSION] ,
          [ROWDATE] ,
          [COLA]
        )
 VALUES ( 50 ,
          N'AS' ,
          240 ,
          N'3' ,
          0 ,
          327520586618000007 ,
          '2011-07-28 09:48:08.453' ,
          N'*0AS024030'
        )
 SET ROWCOUNT 0
 COMMIT TRANSACTION

Ответы [ 2 ]

2 голосов
/ 15 марта 2012

Сделайте это, чтобы выбрать все строки, которые «не проверены»:

SELECT  *
FROM    ATABLE
WHERE   RIGHT('0' + CAST(COLB AS VARCHAR), 2) +
        COLC +
        RIGHT('000' + CAST(COLD AS VARCHAR), 4) +
        COLE +
        CAST(COLF AS VARCHAR) <> COLA
0 голосов
/ 15 марта 2012

Преобразование числа с нулем в целое перед выполнением сравнения.

CASE
   WHEN ZeroPadded NOT LIKE '%[^0-9]%'
   THEN CAST(ZeroPadded AS int)
END
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...