我正在尝试在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列。但是我没有得到这个结果。输入?
答案 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"
。
因此,最好为列和表名使用全小写。此外,当使用小写时,您不需要在列名称周围加上双引号,除非它们是可能在该上下文中表示其他内容的保留字。