Обсуждение: trimming a column
Hi, I need to trim whitespace off of a whole column and replace the existing values with the trimmed ones. This isn't working update mytable set id = trim(id); I'm not sure of the correct syntax. Help appreciated. Mike
Вложения
Michael -- >Hi, > >I need to trim whitespace off of a whole column and replace the existing >values with the trimmed ones. > >This isn't working > >update mytable set id = trim(id); > >I'm not sure of the correct syntax. Help appreciated. > >Mike > The trim function needs to be told what sort of trim to do -- Following the 9.1 manual (you did not specify which version of postgres you are using) try: UPDATE mytable SET id = trim(both ' ' from id). (untested) See <http://www.postgresql.org/docs/9.1/static/functions-string.html> HTH, Greg Williamson
On 05/03/2012 06:55 PM, Greg Williamson wrote: > Michael -- > >> Hi, >> >> I need to trim whitespace off of a whole column and replace the existing >> values with the trimmed ones. >> >> This isn't working >> >> update mytable set id = trim(id); >> >> I'm not sure of the correct syntax. Help appreciated. >> >> Mike >> > > The trim function needs to be told what sort of trim to do -- > > Following the 9.1 manual (you did not specify which version of postgres you are using) try: > > UPDATE mytable SET id = trim(both ' ' from id). Actually not:) test=> SELECT length(trim(' test ')); length -------- 4 > > (untested) > > See<http://www.postgresql.org/docs/9.1/static/functions-string.html> > > HTH, > > Greg Williamson > -- Adrian Klaver adrian.klaver@gmail.com
On 05/03/2012 06:01 PM, Michael P. Soulier wrote: > Hi, > > I need to trim whitespace off of a whole column and replace the existing > values with the trimmed ones. > > This isn't working > > update mytable set id = trim(id); > > I'm not sure of the correct syntax. Help appreciated. Works here: test=> SELECT version(); version --------------------------------------------------------------------------------------- PostgreSQL 9.0.7 on i686-pc-linux-gnu, compiled by GCC gcc (SUSE Linux) 4.6.2, 32-bit test=> create table trim_test(fld_1 varchar); CREATE TABLE test=> INSERT INTO trim_test VALUES (' test '); INSERT 0 1 test=> INSERT INTO trim_test VALUES (' test1 '); INSERT 0 1 test=> INSERT INTO trim_test VALUES (' test2 '); INSERT 0 1 test=> SELECT length(fld_1), fld_1 from trim_test ; length | fld_1 --------+--------- 6 | test 7 | test1 7 | test2 (3 rows) test=> UPDATE trim_test set fld_1 = trim(fld_1); UPDATE 3 test=> SELECT length(fld_1), fld_1 from trim_test ; length | fld_1 --------+------- 4 | test 5 | test1 5 | test2 Sure you do not have an open transaction? Say did the the UPDATE in one session inside a transaction without issuing a COMMIT and looking at data in another session that will not see changes until COMMIT is done. > > Mike -- Adrian Klaver adrian.klaver@gmail.com
On 03/05/12 Adrian Klaver said: > Works here: > test=> SELECT version(); > version > --------------------------------------------------------------------------------------- > PostgreSQL 9.0.7 on i686-pc-linux-gnu, compiled by GCC gcc (SUSE > Linux) 4.6.2, 32-bit eventsdb=# select version(); version -------------------------------------------------------------------------------- ---------------------------- PostgreSQL 8.4.10 on i686-pc-linux-gnu, compiled by GCC gcc (GCC) 4.4.5 2011021 4 (Red Hat 4.4.5-6), 32-bit (1 row) Perhaps it how the fields are displayed... eventsdb=# select length(id), id from application_events; length | id --------+----------------------------------------------------------------------- ------------------------------- 48 | vmbg-msoulier3.nssg.mitel.com_1-1335549662-26268 44 | vmbg-msoulier3.nssg.mitel.com_1-1335549687-0 27 | tug-manage-ssl-1335549693-0 46 | vmbg-msoulier3.nssg.mitel.com_1-1335553128-344 44 | vmbg-msoulier3.nssg.mitel.com_1-1335553152-0 27 | tug-manage-ssl-1335553155-0 44 | vmbg-msoulier3.nssg.mitel.com_1-1336056097-0 46 | vmbg-msoulier3.nssg.mitel.com_1-1336058939-285 44 | vmbg-msoulier3.nssg.mitel.com_1-1336058940-0 (9 rows) eventsdb=# select trim(id) from application_events; btrim -------------------------------------------------- vmbg-msoulier3.nssg.mitel.com_1-1335549662-26268 vmbg-msoulier3.nssg.mitel.com_1-1335549687-0 tug-manage-ssl-1335549693-0 vmbg-msoulier3.nssg.mitel.com_1-1335553128-344 vmbg-msoulier3.nssg.mitel.com_1-1335553152-0 tug-manage-ssl-1335553155-0 vmbg-msoulier3.nssg.mitel.com_1-1336056097-0 vmbg-msoulier3.nssg.mitel.com_1-1336058939-285 vmbg-msoulier3.nssg.mitel.com_1-1336058940-0 (9 rows) still, in my app I see a lot of trailing whitespace after reading from the db... Mike
Вложения
On 03/05/12 Michael P. Soulier said: > still, in my app I see a lot of trailing whitespace after reading from the > db... [root@vmbg-msoulier3 eventviewer]# PYTHONPATH=.. python manage.py shell Python 2.6.6 (r266:84292, Dec 7 2011, 20:38:36) [GCC 4.4.6 20110731 (Red Hat 4.4.6-3)] on linux2 Type "help", "copyright", "credits" or "license" for more information. (InteractiveConsole) >>> from main.models import * >>> dir() ['ApplicationEvent', '__builtins__', 'datetime', 'models'] >>> events = ApplicationEvent.objects.all() >>> for event in events: ... print "'%s'" % event.id ... 'vmbg-msoulier3.nssg.mitel.com_1-1335549662-26268 ' 'vmbg-msoulier3.nssg.mitel.com_1-1335549687-0 ' 'tug-manage-ssl-1335549693-0 ' 'vmbg-msoulier3.nssg.mitel.com_1-1335553128-344 ' 'vmbg-msoulier3.nssg.mitel.com_1-1335553152-0 ' 'tug-manage-ssl-1335553155-0 ' 'vmbg-msoulier3.nssg.mitel.com_1-1336056097-0 ' 'vmbg-msoulier3.nssg.mitel.com_1-1336058939-285 ' 'vmbg-msoulier3.nssg.mitel.com_1-1336058940-0 ' lots and lots of whitespace. I think it's in the db. Mike
Вложения
On 03/05/12 Michael P. Soulier said: > lots and lots of whitespace. I think it's in the db. Ah, they're not varchars, they're character columns. That explains it...