POSTGRESQL 文本比较运算符

问题描述 投票:0回答:2

我正在尝试对我的 postgresql 数据进行比较运算符。

我有一系列这样的数据

模拟表

ID | IDName | Hours | Minutes |     
43   John     30      100    
37   Jane     20      92    
1    Don      100     22    

顶部的每个字段在 SQL Server 中都标记为文本。 我正在尝试获取这样的信息。

Select *
From "MockTable"
WHERE "HOURS">'25';    

从而收回第一列和第三列。但是我没有得到这个结果。输入?

sql postgresql comparison-operators
2个回答
6
投票

当您将数字与字符串进行比较时,您必须考虑字母顺序。数字的大小没有意义,此时只是一个词。所以“25”大于“100”,因为按字母顺序,“2”位于“1”之后。

您需要做的是将“小时”字段转换为整数或修复表格,这样您就不会在字符串类型的列中存储数字。

Select * From "MockTable" WHERE CAST("Hours" as INTEGER) > 25;

显然,如果存在

"Hours"
字段包含非数字字符的记录,您将遇到一些困难的问题,因此如果出现这种情况,您将不得不处理它。


0
投票

如果您的列名称并非全部小写,则必须用双引号指定它们,并且大小写与表中的大小写完全相同:

SELECT * FROM "MockTable" WHERE "Hours" > 25;

请注意,这里写的是

"Hours"
而不是
"HOURS"

因此,最好使用全小写的列名和表名。此外,使用小写字母时,不需要在列名称两边加上双引号,除非它们是保留字,在该上下文中可能有其他含义。

© www.soinside.com 2019 - 2024. All rights reserved.