Как выполнять вычисления подстрок в SQL?

#sql #sql-server #subquery #substring

#sql #sql-сервер #подзапрос #подстрока

Вопрос:

Я работаю с таблицей, полной онлайн-заказов клиентов. У каждого заказа есть код компании, который может быть либо ’09’, ’07’, ’04’, ’03’, и ’01’. У каждого заказа есть номер заказа, который выглядит примерно так ‘90180628’. Вы можете определить, от какой компании получен заказ, по первому числу его номера заказа. Итак, этот заказ предназначен для компании 09, а этот ‘31610629’ будет номером заказа для компании ’03’

До того, как я обращался к таблице, которая имела прямое представление о том, из какой компании поступил каждый заказ, мое предложение WHERE выглядело следующим образом.

 WHERE 
    (O.Company_Code = @CompanyCode OR @CompanyCode IS NULL) AND 
    (O.Division_Code = @DivisionCode OR @DivisionCode IS NULL) AND
    o.Customer_Number = 'ecom2x' AND 
    o.Customer_Purchase_Order_Number not like '%bulk%' AND
    o.DateRecordModified BETWEEN @FromDate AND DATEADD(dayofyear, 1, @ToDate)
  

Где @CompanyCode — это параметр, который выбирает пользователь (поскольку это отчет) и так далее.

Однако сейчас я использую другую таблицу и не могу получить доступ к O.Company_Code, поэтому я должен сверить код компании с номером заказа.

Итак, это было бы что-то вроде этого

 Where SH.Packslip like 'substring(@CompanyCode,2,1)%'
  

Это псевдокод, который не работает, но в этом и заключается идея. Кто-нибудь знает, как превратить это в функциональный код? Возможно, мне придется сделать это в двух частях, где в первой части я объявляю новую переменную и устанавливаю ее равной второй символьной подстроке, а затем я проверяю, начинается ли packslip с этой новой переменной (поскольку мне нужно избавиться от 0 в 09)

Ответ №1:

вы можете попробовать это.

 Where SH.Packslip like substring(@CompanyCode,2,1)   '%'
  

Ответ №2:

Попробуйте использовать LEFT operator. Он получает ваш код и помещает его в LIKE инструкцию:

 SELECT t.* FROM @table t
WHERE t.Foo LIKE LEFT (@CompanyCode, 1)   '%';
  

Позвольте мне показать пример:

 declare @CompanyCode varchar(5) = '3555';
DECLARE @table Table
( 
    Foo VARCHAR(50)
)

insert into @table
(
    Foo
)
VALUES
(
    '90180628' -- Foo - VARCHAR
)
, ('31610629')
, ('51610629')

SELECT t.* FROM @table t
WHERE t.Foo LIKE LEFT (@CompanyCode, 1)   '%';
  

ВЫВОД:

 Foo
31610629