Oracle SQL Group BY via column substr
我们正在编写一个简单的选择,计算有多少产品具有相同的前4个字符。我们的产品ID为10位/字符 但是,运行此操作时,我们会得到: SQL错误[936][42000]:ORA-00936:缺少表达式Oracle SQL Group BY via column substr,sql,oracle,select,group-by,count,Sql,Oracle,Select,Group By,Count,我们正在编写一个简单的选择,计算有多少产品具有相同的前4个字符。我们的产品ID为10位/字符 但是,运行此操作时,我们会得到: SQL错误[936][42000]:ORA-00936:缺少表达式 你知道怎么做吗?问题在于方括号。Oracle不支持这种语法。这些标识符可能不需要引用,因此: SELECT SUBSTR(PRODID,1, 4) AS [PROD4], COUNT(*) AS [NumberOfRows] FROM [sch].[ProdTable] GROUP BY SUBST
你知道怎么做吗?问题在于方括号。Oracle不支持这种语法。这些标识符可能不需要引用,因此:
SELECT SUBSTR(PRODID,1, 4) AS [PROD4], COUNT(*) AS [NumberOfRows]
FROM [sch].[ProdTable]
GROUP BY SUBSTR(PRODID,1, 4)
如果确实需要引用标识符(例如,如果表名是作为区分大小写的名称创建的,或者确实需要大小写混合的列别名),则可以使用双引号:
SELECT SUBSTR(PRODID,1, 4) PROD4, COUNT(*) NumberOfRows
FROM sch.ProdTable
GROUP BY SUBSTR(PRODID,1, 4)
问题在于方括号。Oracle不支持这种语法。这些标识符可能不需要引用,因此:
SELECT SUBSTR(PRODID,1, 4) AS [PROD4], COUNT(*) AS [NumberOfRows]
FROM [sch].[ProdTable]
GROUP BY SUBSTR(PRODID,1, 4)
如果确实需要引用标识符(例如,如果表名是作为区分大小写的名称创建的,或者确实需要大小写混合的列别名),则可以使用双引号:
SELECT SUBSTR(PRODID,1, 4) PROD4, COUNT(*) NumberOfRows
FROM sch.ProdTable
GROUP BY SUBSTR(PRODID,1, 4)
只是对@GMB的答案进行了一点扩展 [附表][可生产] 在Oracle中,引用对象的语法不正确。不要将它们括在
[]
方括号内:
SELECT SUBSTR(PRODID,1, 4) PROD4, COUNT(*) "NumberOfRows"
FROM sch."ProdTable"
GROUP BY SUBSTR(PRODID,1, 4)
然而,如果您真的想使用方括号来命名对象(这会非常难看),您可以使用带引号的标识符。它以双引号开始和结束“
。这也使得区分大小写,并且在引用该对象时必须始终与双引号一起使用
FROM sch.ProdTable
在SQL中,除非表是以这种方式创建的,否则不需要这样做。您仍然可以使用带引号的标识符用方括号命名列的别名:
create table "[t]" as select 'hi' as "[str]" from dual;
select * from "[t]";
[str]
-----
hi
只是对@GMB的答案进行了一点扩展 [附表][可生产] 在Oracle中,引用对象的语法不正确。请不要将它们括在
[]
方括号中:
SELECT SUBSTR(PRODID,1, 4) PROD4, COUNT(*) "NumberOfRows"
FROM sch."ProdTable"
GROUP BY SUBSTR(PRODID,1, 4)
然而,如果你真的想用方括号来命名你的对象(这真的很难看),你可以使用带引号的标识符。它以双引号开始和结束。这也会使then区分大小写,并且在引用该对象时必须始终使用双引号
FROM sch.ProdTable
在SQL中,除非以这种方式创建表,否则不需要这样做。您仍然可以使用带引号的标识符用方括号命名列的别名:
create table "[t]" as select 'hi' as "[str]" from dual;
select * from "[t]";
[str]
-----
hi
不,这并不是说如果你使用带引号的标识符,Oracle会抱怨方括号
“[PROD4]”
或“[ProdTable”]
是对象的有效值。@LalitKumarB:我认为OP使用方括号作为引用字符(例如在T-SQL中)。是的,这是实际问题。是的,这解决了我的答案。我像T-SQL一样接近它,没有意识到我使用了括号而不是引号!不,这并不是说如果你使用带引号的标识符,Oracle会抱怨方括号“[PROD4]”
或“[ProdTable”]
是对象的有效值。@LalitKumarB:我认为OP使用方括号作为引用字符(例如在T-SQL中)。是的,这是实际问题。是的,这解决了我的答案。我像T-SQL一样接近它,没有意识到我使用了括号而不是引号!哦,不,我们不会那样做的。用括号表示表名听起来有问题。谢谢你的提示!哦,不,我们不会那样做的。用括号表示表名听起来有问题。谢谢你的提示!