【问题标题】:How to parse out quoted values from a column with sql如何使用sql从列中解析出引用的值
【发布时间】:2009-08-23 04:05:23
【问题描述】:

我有一个具有这样的值的字段...

s:10:"03/16/1983"; s:4:"男"; s:2:"否";

我想解析出引用的值。

它将是 substr 和 instr 的某种组合

它是双引号,我很难找到它的位置。

我尝试过 select substr(field_value, instr(field_value,'"'),instr(field_value,'"',null,2)) from table where 等

向一个菜鸟问题道歉...

【问题讨论】:

  • 我已经尝试过 select substr(field_value, instr(field_value,'"'),instr(field_value,'"',null,2)) from table where 等
  • 在 MySQL 中这样做是否有令人信服的理由?它不会在我为这项任务选择的十大工具中......
  • 您使用的是哪个数据库?答案会有所不同,具体取决于它是 mysql、sql server 还是其他。
  • True FDumlao -- 例如,PostgreSQL 可以使用完整的 perl 风格的正则表达式。不过,标签确实说 MySQL,它支持更有限的正则表达式语法
  • mysql 是数据库。我熟悉正则表达式,但不在 sql 代码中。

标签: sql mysql substr


【解决方案1】:

这里应该可以工作(目前无法测试):

select substr(substr(field_value, instr(field_value,':')+1, CHAR_LENGTH(field_value)-1),
              instr(substr(field_value, instr(field_value,':')+1, CHAR_LENGTH(field_value)-1),':')+1)

编辑:将我的评论放在答案中:

select substr(field_value, instr(field_value,'\"'),CHAR_LENGTH(field_value)-1)

【讨论】:

  • 这很完美,但我需要双引号中的内容而不是冒号。这更多的是我遇到的问题。是 '"' 吗?还是我不知道在 sql 中是否像 "\"" 一样转义它。不过谢谢你!这有助于我靠近!
  • 我试图做的是利用你所有的例子在第二个冒号后面都有字符串的事实,然后利用它来抓取字符串,而不用弄乱双引号。我不喜欢使用必须使用这种特定知识的策略,因为它可能会改变,但我以前必须这样做。
  • 好的,那么使用正则表达式查找和替换以删除 "s ... 或者这很傻吗?
  • mysql 也告诉我 len 函数不存在。
  • 我找到了...在 mysql 中它是 CHAR_LENGTH 而不是 len
猜你喜欢
  • 2021-03-13
  • 2020-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多