Postgresql: удалить дефисы и пробелы - PullRequest
0 голосов
/ 03 мая 2018

В настоящее время я работаю с данными БД, которые содержат пробелы и дефисы. Я искал по сети и нашел это Удалить / заменить специальные символы в значениях столбцов? . Я пытался следовать ответу, но я все еще получаю дефисы. Я попытался поиграть с ним, я могу только удалить пробел

conn_p = p.connect("dbname='p_test' user='postgres' password='postgres' host='localhost'")
conn_t = p.connect("dbname='t_mig1' user='postgres' password='postgres' host='localhost'")

cur_p = conn_p.cursor()
cur_t = conn_t.cursor()

cur_t.execute("SELECT CAST(REGEXP_REPLACE(studentnumber, ' ', '') as integer), firstname, middlename, lastname FROM sprofile")
rows = cur_t.fetchall()

for row in rows:
    print "Inserting ", row[0], row[1], row[2], row[3]
    cur_p.execute(""" INSERT INTO "a_recipient" (id, first_name, middle_name, last_name) VALUES ('%s', '%s', '%s', '%s') """ % (row[0], row[1], row[2], row[3]))

cur_p.commit()
cur_pl.close()
cur_t.close()

Чего я хотел бы добиться, так это если я получу номер студента 001-2012-1456, он будет отображаться как 000120121456.

Ответы [ 2 ]

0 голосов
/ 03 мая 2018

Очень простая в использовании встроенная функция перевода .

Пример:

select translate('001-2012-145 6', '- ', '');

Вывод вышеуказанной команды: 00120121456

0 голосов
/ 03 мая 2018

Чтобы эффективно уничтожить все символы в наборе, используйте translate. Требуется набор символов для перевода в другой набор символов. Если другой набор пуст, он удаляет их.

test=> select translate('001-2012-145 6', '- ', '');
  translate  
-------------
 00120121456

Хотя translate проще и быстрее для этой конкретной работы, важно знать, как использовать регулярные выражения для других. Чтобы сделать это с помощью regexp_replace, нужно внести два изменения.

Сначала вы должны сопоставить set из - и как [- ].

Затем вы должны указать, чтобы заменить все вхождения, иначе он остановится после первого. Это делается с флагом g.

test=> select regexp_replace('001-2012-145 6', '[- ]', '', 'g');
 regexp_replace 
----------------
 00120121456

Вот учебник по регулярным выражениям POSIX и наборам символов .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...