RTRIM в пункте, где - PullRequest
       12

RTRIM в пункте, где

0 голосов
/ 03 января 2019

Я использую Microsoft SQL Server 2012 Management Studio. В приведенной ниже таблице я пытаюсь избавиться от идентификационных номеров с 1 января 2019 по 4 января 2019 года, которые состоят из 5 цифр или после того, как тире начинается с нуля.

IDnum        DateTime
-----------------------
11-102434    03/01/2019    
11-02434     03/01/2019 
11-102421    02/01/2019
11-02421     02/01/2019
10-02345     31/12/2018

Это то, что я хотел бы увидеть

IDnum        DateTime
-------------------------
11-102434    03/01/2019    
11-102421    02/01/2019
10-02345     31/12/2018

Я думаю, что в предложении where должен быть какой-то RTRIM(), но не уверен, как это сделать.

Ответы [ 4 ]

0 голосов
/ 03 января 2019

Читая ваш вопрос, у вас есть 2 основных критерия в ваших исключенных данных:

  1. Дата между 2019-01-01 и 2019-01-04, AND
  2. Либо длина IDNum составляет 5 символов (после тире) ИЛИ * IDNum (после тире) начинается с 0.

Как и в ответе @ Гордона, вы можете заключить это в NOT:

WHERE NOT
(
    [DateTime] >= '2019-01-01'
    AND [DateTime] <= '2019-01-04'
    AND
    (
        IDNum LIKE '%-0%'
        OR IDnum LIKE '%-_____'
    )
)

С законами Де Моргана , мы можем немного упростить это (или, по крайней мере, распределитьNOT):

WHERE
(
    [DateTime] < '2019-01-01'
    OR [DateTime] > '2019-01-04'
    OR
    (
        IDNum NOT LIKE '%-0%'
        AND IDnum NOT LIKE '%-_____'
    )
)
0 голосов
/ 03 января 2019

, если ваша цель - выполнить следующие два условия: =

  1. DateTime должно быть в период с 1 января по 4 января 2019

  2. В IDNum длина числа после '-' должна быть больше или равна 5, тогда вам, вероятно, нет необходимости в rtrim.

код:

Select * from Test where DateTime >= '01-01-2019' and DateTime <= '01-03-2019' and ((SUBSTRING(IDNum, 4, 1) = 0) or LEN(SUBSTRING(IDNum, 4, LEN(IDNum)-1)) >= 5);

хотя я не уверен, как 31-12-2018 присутствуют в вашем ожидаемом результате.: D

0 голосов
/ 03 января 2019

Вот один из способов.

SELECT IDnum, DateTime
  FROM YourTable
 WHERE NOT (DateTime >= '2019-01-01' AND DateTime < '2019-01-05' --exclude from 1st Jan 2019 to 4th Jan 2019
             AND (IDnum LIKE '%-_____'  --that are 5 digits long after the dash
                  OR 
                  IDnum LIKE '%-0%'  --or begin with a 0 (after the dash)
                 )
           )
0 голосов
/ 03 января 2019

Не является ли это относительно простым where предложением?

where not (datetime >= '2019-01-01' and datetime < '2019-01-05' and
           (idnum like '%-_____' or
            idnum like '%-0%'
           )
          )
...