Как сделать вычисления подстроки в SQL? - PullRequest
0 голосов
/ 12 марта 2019

Я работаю со столом, полным заказов клиентов онлайн.Каждый заказ имеет балансовую единицу, которая может быть «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)

Ответы [ 2 ]

2 голосов
/ 12 марта 2019

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

Where SH.Packslip like substring(@CompanyCode,2,1) + '%'
0 голосов
/ 12 марта 2019

Попробуйте использовать LEFT оператор.Он получает ваш код и помещает ваш код в оператор 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
...