文本

时间:2015-10-12 23:53:25

标签: sql postgresql comparison-operators

我正在尝试在postgresql数据上做比较运算符。

我有一系列这样的数据

MockTable

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

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

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

因此收回第1和第3列。但是我没有得到这个结果。输入?

2 个答案:

答案 0 :(得分:1)

当您将数字作为字符串进行比较时,您必须考虑按字母顺序排列。数字的大小毫无意义,此时仅仅是一个词。所以" 25"大于" 100"因为" 2"来自" 1"按字母顺序排列。

你需要做的是投射你的"小时"字段为整数(或修复该死的表,因为字符串字段中的数字很讨厌)。

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

显然,如果有"Hours"字段包含非数字字符的记录,您将遇到一些困难的问题,所以如果出现这种情况,您将不得不处理这个问题。< / p>

答案 1 :(得分:0)

如果您的列名不是全小写,则必须用双引号指定它​​们,并使用与表中完全相同的大小写:

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

请注意,这是"Hours"而不是"HOURS"

因此,最好为列和表名使用全小写。此外,当使用小写时,您不需要在列名称周围加上双引号,除非它们是可能在该上下文中表示其他内容的保留字。