【问题标题】:SQL query to pull out weight: eg 249kg from comments text field提取重量的 SQL 查询:例如,来自评论文本字段的 249kg
【发布时间】:2017-09-26 10:54:17
【问题描述】:

我想从 SQL Server 中的 cmets 字段中提取一些数字和文本。

cmets 字段显示(体重:249kg)但我只需要 249kg

什么查询可以提取此信息,因为需要多一点 '%[0-9]%'

谢谢

【问题讨论】:

  • 对于那个确切的字符串,在 T-SQL 中,你可以使用 REPLACE(Field,'Weight: ','') 但我猜还有更多的排列。你为什么不向我们展示一些其他的,并告诉我们什么样的数据库(SQL Server?Oracle?)
  • (1) 用您正在使用的数据库标记您的问题。 (2) 提供几个完整注释字符串的例子。 (3) 解释如果没有权重怎么办是多个权重。

标签: sql sql-server regex


【解决方案1】:

您可以使用SUBSTRINGCHARINDEX,它看起来有点乱但应该可以工作

DECLARE @table TABLE(value1 VARCHAR(100));

INSERT INTO @table
VALUES('Weight: 249KG');

SELECT value1
FROM @table;


SELECT SUBSTRING
       (value1, CHARINDEX
       (':', value1)+1, CHARINDEX('KG', value1)-CHARINDEX(':', value1)-1) AS value1
FROM @table;

返回: Weight: 249KG249

编辑:

我错过了阅读,我以为您只想要数字而不是后面的单位,即 249 而不是 249KG。您可以使用 REPLACE 来表示:

SELECT REPLACE(value1,'Weight: ','') FROM @table

【讨论】:

  • 这似乎可以工作,目前我在将查询放在一起时遇到了一些麻烦。这是我正在选择的表,它是 dbo.JobOper.CommentText,我需要从 SELECT TOP (100) PERCENT dbo.JobOper.JobNum、dbo.LaborDtl.ClockInDate、dbo.JobOper.CommentText、dbo.JobOper 中提取值.OpCode, dbo.JobOper.QtyCompleted, dbo.JobOper.JobComplete 从 dbo.LaborDtl 右外连接 dbo.JobOper ON dbo.LaborDtl.Company = dbo.JobOper.Company AND dbo.LaborDtl.JobNum = dbo.JobOper.JobNum WHERE ( dbo.JobOper.OpCode LIKE 'QF-saw') ORDER BY dbo.JobOper.JobNum
  • 你为什么使用前 100%?你想用哪个?子串还是替换?
  • 我希望将其拉到视图中,而不是替换或编辑任何内容。
  • 根据您要使用的方法将您的选择更改为REPLACE (dbo.JobOper.CommentText, 'Weight: ',''),SUBSTRING (dbo.JobOper.CommentText, CHARINDEX (':', dbo.JobOper.CommentText)+1, CHARINDEX('KG', dbo.JobOper.CommentText)-CHARINDEX(':', dbo.JobOper.CommentText)-1) AS CommentText,
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-28
  • 2019-03-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多