如何在SQL查询(SAP B1)中使用LIKE?

时间:2018-09-05 08:18:06

标签: sql sql-server sap sapb1

例如,如何在SQL查询中使用LIKE

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

对不起,我有用户定义的天数字段(U_Tds),所以我想以用户定义的值获取同一年中所有天数的列表

请任何人都可以帮助我

2 个答案:

答案 0 :(得分:1)

您极不可能将LIKE(与字符串相关的功能)用于日期。更有可能使用日期函数代替。

此外,如果该查询需要日期范围,则无论如何都要避免使用函数。只需将date列与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!

答案 1 :(得分:0)

YEAR是一个函数,然后可以将结果与%

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