数据库列中的换行符和空格

2 投票
4 回答
1091 浏览
提问于 2025-04-16 14:21

我找不到使用 WHERE 条件的记录:

SELECT sensor FROM table WHERE type = 'FEET'

表里有一些记录,它们的 'type' 列的值是 'FEET',所以我觉得可能是格式出了问题。结果可能是比 'FEET' 多了一些东西,这样就找不到那些等于 'FEET' 的记录了。

为了查看 'type' 列里的记录长什么样,我用了以下代码来打印出来:

    queryTem='SELECT type FROM tide_data'   
    curs.execute(queryTem)
    resultsTem=curs.fetchall()
    for resultTem in resultsTem:
        print resultTem
        print resultTem[0]

结果 resultTem 看起来像这样:

 ('FEET\n                         ',)

而 resultTem[0] 的结果是:FEET,实际上应该是 'FEET\n'。根据以上信息,我有没有办法重写 WHERE 条件语句,找到正确的记录?因为在语句中:WHERE a = value.. a 应该是列名,我想不出有什么办法可以做到。

有人能帮我一下吗?谢谢..

4 个回答

1

试着用一个带有“like”关键字的查询。这种方法虽然不是最优的,但可以达到目的。

查询的写法是:SELECT sensor FROM table WHERE type LIKE ‘%FEET%’

1

resultTem[0] 不是 "FEET",而是 "FEET\n"。如果你想让你的查询正常工作,就需要清理一下你的数据。

2

你说“在这个语句中:WHERE a = value.. a 应该是一个列名”。其实不然,a 可以是任何表达式。

你说“resultTem 的结果像这样:('FEET\n ',),而 resultTem[0] 的结果像这样:FEET,应该是 'FEET\n'”。与其用 print resultTem[0],不如用 print repr(resultTem[0])。在调试的时候,养成使用 repr() 的习惯。

正如其他人指出的,你的数据需要清理。如果 type 列上有索引,后面多余的空格会影响索引。如果你的数据库有一个函数(比如叫 STRIP),它的功能类似于 Python 的 str.strip(),你可以用一行代码来解决这个问题,像这样:

UPDATE table SET type = STRIP(type) WHERE type != STRIP(type);

同时,你可以做一个“以...开头”的查询:

SELECT sensor FROM table WHERE type LIKE 'FEET%'

或者使用

SELECT sensor FROM table WHERE STRIP(type) = 'FEET'

进一步的评论:

(1) 看起来你的输出字符串宽度是 30 个字符(除非在你粘贴和我编辑的时候被搞乱了):

('FEET\n                         ',)
  .... v....1....v....2....v....3

额外空格的一个可能原因是列的数据类型是 CHAR(30)。如果这个可以由你控制,你可能想把它改成 VARCHAR(30) 或者直接用 VARCHAR。可以查看 文档的这一部分,注意页面中间的“提示”。

(2) 似乎没有像 str.strip() 那样简单的 SQL 函数来去掉前后的空格。在 PostgreSQL 中,你需要用类似于

TRIM(E' \r\n\t' FROM your_string_expression)

的方式来去掉前后的空格、回车、换行和制表符。可以查看文档 这里(还有 这里;阅读第 4.1.2.2 节,关于带 C 风格转义的字符串常量)。

撰写回答