【问题标题】:Substring and sorting a sql table子字符串和排序 sql 表
【发布时间】:2015-08-17 17:17:14
【问题描述】:

我有一张如下所示的表格

ID       Date            Reason       Tag
1        2 Jun 2015      Create New   9_0_17
2        2 Jun 2015      Name Change  Non User Event
3        2 Jun 2015      Modified     9_0_17
4        2 Jun 2015      Saved        9_1_17
5        2 Jun 2015      Create New   9_0_18

我想要一个 select 语句,我可以通过标签以 9 开​​头的位置过滤表格,标签列中最后一个下划线后面的值为 17。结果如下所示

ID       Date            Reason       Tag
1        2 Jun 2015      Create New   9_0_17
3        2 Jun 2015      Modified     9_0_17
4        2 Jun 2015      Saved        9_1_17

请注意,第一个下划线后的值最高可达 999,第二个下划线后的值最高可达 99999。

【问题讨论】:

  • Sql Server、Oracle、MySql?
  • 到目前为止您尝试了哪些方法,您的查询是否遇到任何问题?
  • 在哪里标记像 '9%_17' ?
  • 格式是否始终为 n_n_nn(或“非用户事件”)?
  • 我使用的是 SQL Server 2008 R2

标签: sql substring charindex


【解决方案1】:

你只需要这个:

SELECT ID, Date, Reason, Tag
FROM *your_table* 
WHERE TAG LIKE '9_%_17'

【讨论】:

  • 应该是 LIKE '9%_17'
  • 可以,但是如果标签值为 9_17_18 会发生什么。 select语句仍然会选择不会吗?我只想要第二个下划线后的值为 17 的行。
  • 我刚试过,上面的语句也会选择9_177_188等等:/。
  • 你确定吗?我的应用程序表中有一个类似的字段,它与您的 TAG 字段完全相同。我对该字段的查询适用于该查询
  • 我改变的只是'Where tag like'9_%_1'。查询选择在第二个下划线之后有 1 和 11 的行,依此类推。例如9_0_1、9_0_11 等
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-22
  • 2013-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多