перевод строки и пробелы в столбце базы данных - PullRequest
2 голосов
/ 24 марта 2011

Я не могу найти записи, используя WHERE CLAUSE:

SELECT sensor FROM table WHERE type = 'FEET'

В таблице есть записи, у которых значения столбца 'type' равны 'FEET', поэтому я полагаю, что с форматом что-то не так.результат будет чем-то большим, чем 'FEET', так что он просто не сможет найти те, которые равны 'FEET'.

Чтобы узнать, как выглядят записи в типе столбца, я использовал следующие коды для их печатиout:

    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 CLAUSE и получить правильные записи?Поскольку в утверждении: WHERE a = value .. a должно быть имя столбца, я не могу придумать, как это сделать.

Кто-нибудь может помочь мне здесь?спасибо ..

Ответы [ 4 ]

2 голосов
/ 24 марта 2011

Вы говорите "" "Так как в утверждении: ГДЕ a = значение .. a должно быть именем столбца" "".Не так, a может быть любым выражением.

Вы говорите "" "resultTem получается что-то вроде: ('FEET \ n',), а resultTem [0] получается как: FEET, который долженbe '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) Кажется, что нет такой простой функции SQL, как str.strip() для удаления ведущих /замыкающий пробел.В PostgreSQL вам понадобится что-то вроде

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

для удаления начальных и конечных пробелов, возврата каретки, перевода строки и табуляции.См. Документы здесь здесь ; см. Раздел 4.1.2.2. Строковые константы с E-Style Escape).

1 голос
/ 24 марта 2011

Попробуйте использовать похожий запрос по ключевому слову. Не так оптимально, но будет работать.

ВЫБРАТЬ датчик из таблицы ГДЕ тип LIKE «% FEET%»

1 голос
/ 24 марта 2011

resultTem [0] - это не "FEET", это "FEET \ n".Вам нужно будет очистить ваши данные, если вы хотите, чтобы ваш запрос работал.

0 голосов
/ 24 марта 2011

Похоже, когда вы вставляете в таблицу, вы не обрезаете конечную линию (\ n)

>>> a = ["FEET\n",]
>>> print a
['FEET\n']
>>> print a[0]
FEET

>>> 

замечаете дополнительную строку после ног.

вы можете просто select sensor from table where type="FEET\n" если \ n всегда добавляется к футам в этом столбце.

...