【问题标题】:Set column value based on regex in PostgreSQL 11.0在 PostgreSQL 11.0 中根据正则表达式设置列值
【发布时间】:2021-03-28 20:51:51
【问题描述】:

我正在尝试根据 entry_id 列中的值填充 PostgreSQL 11.0 中表的列值 (col)。

entry_id   col
hsa_0001
hsa_0002
rno_4894
mmu_7890

我正在使用以下查询:

try:
    connect_str = "dbname='xx' user='xx' host='xx' " "password='xx' port = xx"
    conn = psycopg2.connect(connect_str)
except:
    print("Unable to connect to the database") 

query = "UPDATE tbl
             SET col = (CASE 
                        WHEN entry_id ilike '%hsa' THEN 'homo sapiens'
                        WHEN entry_id ilike '%rno' THEN 'rattus norvegicus'
                        ELSE 'mus musculus'
                        END); "

cursor.execute( query )
#print (query)

conn.commit()
conn.close()
cursor.close()

预期的输出是:

entry_id   col
hsa_0001   homo_sapiens
hsa_0002   homo_sapiens
rno_4894   rattus norvegicus
mmu_7890   mus musculus

运行上述查询时出现错误。我怎样才能达到上述预期的输出。

非常感谢任何帮助!

【问题讨论】:

    标签: regex postgresql


    【解决方案1】:

    您的通配符规范是倒退的。您指定了“ ilike '%hsa”。这转化为“查找所有以 hsaend 的值,而不考虑大小写或长度”。您正在寻找的是“查找所有值,而不考虑以 hsa 开头的大小写或长度”。那就是“ ilike 'hsa%”。所以

    query = "UPDATE tbl
                 SET col = (CASE 
                            WHEN entry_id ilike 'hsa%' THEN 'homo sapiens'
                            WHEN entry_id ilike 'rno%' THEN 'rattus norvegicus'
                            ELSE 'mus musculus'
                            END); "
      
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-04
      • 1970-01-01
      • 2022-11-12
      • 2014-08-15
      • 1970-01-01
      相关资源
      最近更新 更多