我正在尝试对我的 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';
从而收回第一列和第三列。但是我没有得到这个结果。输入?
当您将数字与字符串进行比较时,您必须考虑字母顺序。数字的大小没有意义,此时只是一个词。所以“25”大于“100”,因为按字母顺序,“2”位于“1”之后。
您需要做的是将“小时”字段转换为整数或修复表格,这样您就不会在字符串类型的列中存储数字。
Select * From "MockTable" WHERE CAST("Hours" as INTEGER) > 25;
显然,如果存在
"Hours"
字段包含非数字字符的记录,您将遇到一些困难的问题,因此如果出现这种情况,您将不得不处理它。
如果您的列名称并非全部小写,则必须用双引号指定它们,并且大小写与表中的大小写完全相同:
SELECT * FROM "MockTable" WHERE "Hours" > 25;
请注意,这里写的是
"Hours"
而不是 "HOURS"
。
因此,最好使用全小写的列名和表名。此外,使用小写字母时,不需要在列名称两边加上双引号,除非它们是保留字,在该上下文中可能有其他含义。