Как использовать LIKE в запросе SQL (SAP B1)? - PullRequest
0 голосов
/ 05 сентября 2018

Как я могу использовать LIKE в SQL-запросе, например

Select T0.[U_Tds] FROM HEM1 T0 where  T0.[toDate] LIKE '%YEAR($[HEM1.toDate])'

Извините, у меня есть пользовательское поле взятых дней (U_Tds), поэтому я хочу получить список всех дней за тот же год в пользовательском значении

Пожалуйста, кто-нибудь может мне помочь

Ответы [ 2 ]

0 голосов
/ 05 сентября 2018

Крайне маловероятно, что вы используете LIKE (это функция, связанная со строками) с датами. Гораздо более вероятно, что вместо этого есть функции даты.

Кроме того, если для этого запроса требуется диапазон дат, вы все равно должны избегать функций. Просто сравните столбец даты с 2 константами даты. например,

SELECT T0.[FromDate] 
FROM HEM1 T0 
WHERE T0.[toDate] >= '2017-01-01' and T0.[toDate] < '2018-01-01'

Это даст данные за весь год без необходимости вызова одной функции для каждой строки в таблице.

Синтаксис выше будет работать с SQL Server, но более безопасный формат для литералов даты в SQL Server:

SELECT T0.[FromDate] 
FROM HEM1 T0 
WHERE T0.[toDate] >= '20170101' and T0.[toDate] < '20180101'

Обратите внимание, что даты НЕ хранятся в удобочитаемом формате. Они на самом деле хранятся в виде чисел и преобразуются в строки, чтобы мы, люди, могли их прочитать. Вот почему вы не используете, как здесь. Даты по своей природе являются числовыми, но LIKE - это строки. например Возможно, вы предполагаете, что даты хранятся в «2018-01-01», поэтому «2018%» будет работать. Но это не так. Для этого вам нужно сначала преобразовать каждую дату в строку, например,

where convert(varchar(4), T0.[toDate] ,112) = '2018'-- very inefficient!

or

where format(T0.[toDate],'yyyy') = '2018' -- very inefficient!
0 голосов
/ 05 сентября 2018

YEAR - это функция, результат, который вы затем можете объединить с %

Select T0.[FromDate] FROM HEM1 T0 where  T0.[toDate] LIKE concat('%',YEAR($[HEM1.toDate]))
...