列名=%列名%SQL

时间:2017-05-26 19:02:11

标签: sql netezza

我们有一个用其实际HashMap值替换SQL参数的类。例如,select * from x where date =%processingDate%将替换processingDate的值,然后检索相应的记录。但是,当参数名称与列名相同时,它似乎不会进行替换;例如,select * from x where date =%date%不替换date,然后检索所有记录,因为它的行为类似于一个始终为true的布尔值。这是预期的SQL行为吗?

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

鉴于date是T-SQL中的保留关键字,我建议用[]包装列以限定列。

链接到保留的kewords列表 https://docs.microsoft.com/en-us/sql/t-sql/language-elements/reserved-keywords-transact-sql

您在问题中提到了SQL Paramater。如果它是一个sql参数,我希望你的参数看起来像@date。如果它没有@前缀,则您的查询可能正在评估列而不是您期望的参数。

我相信这样的事情会对你有用:

- 假设@date被评估为字符串 选择 * 来自x WHERE [date] LIKE'%'+ @date +'%'

- 评估特定值(like和=运算符之间的研究差异) 选择 * 来自x WHERE [date] = @date