【问题标题】:Select String value in SQL Server在 SQL Server 中选择字符串值
【发布时间】:2019-10-21 16:38:57
【问题描述】:

我在 SQL 表中有这些字段

[header]nombre=LPP Expreso LD Santiago 2 Descargas-01-10-2007 codigo=ACGRZ target=0 activo=0
[header]nombre=BS.AS / ORAN 01-07-2019 codigo=ACJEX target=0 activo=1 VigenciaDesde=01/07/2019
[header]nombre=ATC Cargas MZA/TUC/SGO.TN.03/03/10 DEV codigo=ACLGO target=0 activo=1 VigenciaD

如何进行查询以获取字符串:codigo=XXXXXX? 文本 codigo 总是处于不同的位置

【问题讨论】:

  • 您的问题不清楚。你的表结构是什么,你想做什么?
  • 如果这是您表中的数据,那么您的数据库设计存在很大问题。

标签: sql sql-server sql-server-2008 sql-server-2012


【解决方案1】:

SQL Server 的字符串处理功能很差。这就是为什么最好在数据进入数据库时​​对其进行处理。

也就是说,你可以为所欲为。这是一种方法:

select t.*, left(v1.str, charindex(' ', v1.str + ' ')) as codigo_str
from (values ('[header]nombre=ATC Cargas MZA/TUC/SGO.TN.03/03/10 DEV codigo=ACLGO target=0 activo=1 VigenciaD')) t(str) cross apply
     (values (stuff(t.str, 1, charindex('codigo=', t.str + 'coldigo=') - 1, ''))) v1(str);

这会切断'codigo=' 之前的字符串。然后它使用left() 将所有内容带到第一个空格。

如果'codigo=' 不在字符串中或后面没有空格,则在charindex() 中使用连接可以确保安全。

【讨论】:

  • 它可以像您发布的那样编写字符串,但是我如何将它应用于列?
  • @LopezLopez 。 . .我不知道你在评论中问什么。在此查询中,列名称为 str。你可以使用任何你喜欢的名字。
【解决方案2】:

玩转 SQL 内置函数、CHARINDEX 和 SUBSTRING。从逻辑上讲,以下伪代码应该可以工作:

  1. 获取关键字与整个字符串一起放置的索引。
  2. 从索引中,添加您在关键字中使用的字符数或长度。
  3. 从第 2 步的结果中对整个文本进行子串化,直到达到所需文本长度的数量。如果你的文本是固定的,那么它会更容易。

请参阅 CHARINDEXSUBSTRING

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-27
    • 2019-05-12
    • 1970-01-01
    • 2022-12-02
    • 2021-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多