【问题标题】:Select a part of a string in MySQL在 MySQL 中选择字符串的一部分
【发布时间】:2015-06-02 16:40:53
【问题描述】:

我有一个带有字符串列的 MySQL 表,

ID       String                                                                                        
-----   -----------------------------------------
1        {"Type":"new", "Node":"{Status=New, Properties=[{PropertyValue=Samp, PropertyRefernceTypeID=1, PropertyTypeID=26}, {PropertyValue=25, PropertyRefernceTypeID=1, PropertyTypeID=33}]}"}
2        {Type":"new", "Node":"{Status=New, Properties=[{PropertyValue=25, PropertyRefernceTypeID=1, PropertyTypeID=33}, {PropertyValue=168-3, PropertyRefernceTypeID=1, PropertyTypeID=103}]}"}

现在如何在 MySQL 选择查询中只选择 PropertyTypeID=33 的 PropertyValue?仅当所有字符串的长度相等时才可以使用substring() 方法,但在我的情况下,长度可能因不同的 id 而异。

【问题讨论】:

  • 你在你的应用程序中做 mysql 不擅长字符串操作
  • 您是这样创建表还是要修复它?
  • 我有一个将 json 存储为字符串的表。
  • 这是什么JSON?无效。
  • 您只需要该特定值还是字符串中的任何值?

标签: mysql select substring


【解决方案1】:

这就是为什么在数据库字段中存储 JSON、序列化数组/对象或只是多个值被认为是不好的做法,除非出于某种原因,您永远不需要其中的任何内容。

该字段应始终是原子的。您应该遵循数据库规范化指南。

因此你的数据库应该是这样的:

ID | PropertyValue | PropertyReferenceTypeID |  ProductTypeID

那你就不会遇到这个问题了,你就做SELECT PropertyValue FROM Properties WHERE ID=1

但是现在,为了避免这个麻烦,如果您使用的是应用程序语言,只需获取字符串并对其进行解码即可。例如,在 PHP 中:

$array = json_decode($str);
$PropertyValue = $arr['Node']['Properties']['PropertyValue'];

附:您的 json 在嵌套时仍然不完全有效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多