如何在 SQL 查询中使用 LIKE (SAP B1)?
How to use LIKE in SQL Query (SAP B1)?
如何在 SQL 查询中使用 LIKE
Select T0.[U_Tds] FROM HEM1 T0 where T0.[toDate] LIKE '%YEAR($[HEM1.toDate])'
抱歉,我有用户定义的拍摄天数字段(U_Tds),所以我想获取用户定义值中同一年拍摄的所有天数的列表
请任何人帮助我
YEAR
是一个函数,您可以将结果与 %
连接起来
Select T0.[FromDate] FROM HEM1 T0 where T0.[toDate] LIKE concat('%',YEAR($[HEM1.toDate]))
您极不可能对日期使用 LIKE
(这是一个与字符串相关的功能)。更有可能使用日期函数。
此外,如果该查询需要日期范围,您无论如何都希望避免使用函数。只需将日期列与 2 个日期常量进行比较。例如
SELECT T0.[FromDate]
FROM HEM1 T0
WHERE T0.[toDate] >= '2017-01-01' and T0.[toDate] < '2018-01-01'
这将提供一整年的数据,而无需为 table 中的每一行调用一个函数。
上面的语法适用于 SQL 服务器,但 SQL 服务器中日期文字的更安全格式是:
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!
如何在 SQL 查询中使用 LIKE
Select T0.[U_Tds] FROM HEM1 T0 where T0.[toDate] LIKE '%YEAR($[HEM1.toDate])'
抱歉,我有用户定义的拍摄天数字段(U_Tds),所以我想获取用户定义值中同一年拍摄的所有天数的列表
请任何人帮助我
YEAR
是一个函数,您可以将结果与 %
Select T0.[FromDate] FROM HEM1 T0 where T0.[toDate] LIKE concat('%',YEAR($[HEM1.toDate]))
您极不可能对日期使用 LIKE
(这是一个与字符串相关的功能)。更有可能使用日期函数。
此外,如果该查询需要日期范围,您无论如何都希望避免使用函数。只需将日期列与 2 个日期常量进行比较。例如
SELECT T0.[FromDate]
FROM HEM1 T0
WHERE T0.[toDate] >= '2017-01-01' and T0.[toDate] < '2018-01-01'
这将提供一整年的数据,而无需为 table 中的每一行调用一个函数。
上面的语法适用于 SQL 服务器,但 SQL 服务器中日期文字的更安全格式是:
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!