【问题标题】:SQL Selecting and Returning Data Based on PatternSQL根据模式选择和返回数据
【发布时间】:2013-08-08 16:14:45
【问题描述】:

在我的办公室,我们使用的一张桌子记录了我们的订单号。问题是员工在数据库字段中输入的数字不一致。
列出了一些示例:

  '7-26-13 543006-27031', '345009-27031', 'KWYD-863009-27031'.

我需要找到一种方法来只返回 'nnnnnn-nnnnn' 子字符串 无论它在该领域的哪个位置。大多数情况下,这种模式处于该领域的尽头,但并非总是如此。我已经在 WHERE 子句中使用 LIKE 表达式将数据记录限制为具有该模式的数据记录,但我不知道如何最好地将该模式作为列返回。


编辑:

我们仍在使用 SQL Server 2000

我想要做的是:

SELECT SUBSTRING(VendorOrderNo, ??, 12) AS OrderNo
FROM Orders
WHERE VendorOrderNo LIKE '%[0-9][0-9][0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9][0-9]%'

【问题讨论】:

  • 您需要添加一个标签来说明您使用的数据库以及一些说明可能输入及其正确输出的示例数据会有所帮助。
  • 听起来你需要一个 CASE 陈述,但正如 Alex 所写,你需要举例来获得答案
  • 我同意 Alex 和 TwoLegs 的观点。如果这最终将成为旨在纠正错误数据条目的 UPDATE 语句的一部分,那么您也可以提供一些这方面的信息。
  • 我已将示例从泛型更改为实际数据。我还添加了一个关于我想要做什么的半查询。

标签: sql select pattern-matching sql-server-2000


【解决方案1】:
 select 'nnnnnn-nnnnn' as employeeid 
  from table 
 where employees like'%nnnnnn-nnnnn'

【讨论】:

    【解决方案2】:

    如果你先调整你的数据会更好,你可以试试这个(它用于MYSQL)

    SELECT * FROM your_table_name WHERE order_number REGEXP '[0-9]+-[0-9]+';
    

    SQLFIDDLE

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-08
      • 1970-01-01
      • 1970-01-01
      • 2021-04-25
      相关资源
      最近更新 更多