以数字作为字段名称中的第一个字符进行查询

Posted

技术标签:

【中文标题】以数字作为字段名称中的第一个字符进行查询【英文标题】:Query with numeric as first character in field name 【发布时间】:2014-05-29 13:30:45 【问题描述】:

我正在通过 RODBC 运行 SQL 查询。我有一个字段给我带来查询问题,标题为“1YearTotalSpend”。它是一个数字字段,在进行一些诊断后,我可以看到字段值的内容没有错误,它们是数字。

具体来说,我收到的错误是:"[RODBC] ERROR: Could not SQLExecDirect...

library(RODBC)
# This works fine, where "AnyOtherSpendField" 
# is a field whose name doesn't start w/ a numeral.
df <- sqlQuery(handle, "select ID, FieldA, FieldB, FieldC
                          from Table.A
                          where Type not like 'NULL'
                          and Code like 'SUB'
                          and Status in ('100','440','222')
                          and AnyOtherSpendField > 0
                          order by AnyOtherSpendField desc ")
# however both of the two options below fail:
"...and 1YearTotalSpend > 0"
"...order by 1YearTotalSpend ")

鉴于我的其余代码都可以正常工作,我强烈怀疑该错误是因为字段以 1 开头,而不是“一”。显然,以数字开头的字段是糟糕的数据管理实践,而不是我自己做的。

【问题讨论】:

尝试用双引号 "1YearTotalSpend" 将 1YearTotalSpend 括起来。 @rontornambe 没用... 我没有看到您使用的是使用方括号作为分隔符的 SQL-Server。 【参考方案1】:

如果标识符不以字母字符或下划线开头,则需要对其进行转义。在 SQL Server 中,使用方括号对它们进行转义。所以试试:

and [1YearTotalSpend] > 0
"...order by [1YearTotalSpend]

我还建议您构造列名和表名,这样它们就不需要转义了。

Here 是关于该主题的好文档。

【讨论】:

逃生程序的相关点-我会提醒负责系统的人,他们应该知道的更好!

以上是关于以数字作为字段名称中的第一个字符进行查询的主要内容,如果未能解决你的问题,请参考以下文章

sql中如何批量替换字段里的字符串?

oracle 不等于1怎么查?

sql-labs

SQL查询中,如何判断一个字符串字段的内容的长度

sql 当中 如何查询某个字段中的值的第几个字符中含有相应的值

用零填充的 varchar(5) 字段中的第一个未使用的数字