Как использовать LIKE в запросе SQL (SAP B1)?

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

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

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

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

2 ответа

Решение

Крайне маловероятно, что вы будете использовать 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!

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

Select T0.[FromDate] FROM HEM1 T0 where  T0.[toDate] LIKE concat('%',YEAR($[HEM1.toDate]))
Другие вопросы по тегам