【问题标题】:Convert varchar to integer from substring将 varchar 从子字符串转换为整数
【发布时间】:2021-12-03 16:17:14
【问题描述】:

使用 Microsoft SQL Server 2019

所以我已经从一个大文本字段中解析出几列,并且需要使用解析后的数据作为其他字段的乘数 这是一个主要用于上下文的解析列

SUBSTRING(curv.curv_data, 
          CHARINDEX('PctUsage', curv.curv_data, CHARINDEX('||1', curv.curv_data)) + 9, 
          (CHARINDEX(')())', curv.curv_data, CHARINDEX('PctUsage', curv.curv_data, CHARINDEX('||2', curv.curv_data))) - 9) - CHARINDEX('PctUsage', curv.curv_data, CHARINDEX('||1', curv.curv_data) + 9)) PctUsage1

这是输出。

PctUsage1
5
3.5
0.5
6.5
5
9
1
1.3
1.5
25.
4
0.0
1.2

所以考虑到有 0 和 0.5,我很难将这个专栏变成有用的东西。我想要的最终结果是将这些转换为可用的百分比,例如 5 转换为 .05 等等。

我将在子选择中使用上面的 SQL,然后将其用作我的工作时间字段的乘数 这里是我的乘数字段的示例

Working_hours
51.600006
0.000000
20.799993
8.399999
28.799999
86.027731
5.199999

这是我希望能够使用的线

PctUsage1*Working_hours curved_hours,

所以 working_hours 已经是一个整数,但 Pctusage1 是一个 varchar

提前感谢您的帮助

【问题讨论】:

  • 如果您需要小数位,您想使用十进制数据类型,而不是 int。您只需除以 100.0 即可轻松地将结果转换为所需的输出。注意那里的小数点,这很重要。
  • 仅供参考,您使用的是 SQL Server,不是 SQL Server Management Studio (SSMS)。 SSMS 只是一个用于 SQL Server 的 IDE。这就像在被问到您使用什么语言进行编码时说您正在使用 Visual Studio。
  • 我非常愿意将结果划分为 100,我的问题是将它当前的 varchar 转换为可以划分的东西,如果你有任何建议,我全神贯注(和眼睛) 感谢您的回复!
  • 关于将它们转换为百分比,我个人会将它们保留为十进制值。 5% 作为数值 0.05 并且任何好的表示层都将显示像 0.05 这样的值,当给定类似 "0%" 的格式样式时,该值将显示为 5%
  • @Larnu 谢谢你,这将有助于前进。有没有一种简单的方法可以告诉我正在运行什么版本的 SQL Server?

标签: sql-server integer varchar


【解决方案1】:

好的,所以我想我有一个解决方案,抱歉给你们带来的任何麻烦我想写下我的问题确实帮助我解决了它。我使用了带有 try_cast 的 case 语句,它有助于过滤掉我只使用一种解决方案时遇到的不同问题。最后一个问题是确保我的乘数是正确的,因为我必须将 CHARINDEX 与嵌入的 case 语句一起使用

case when try_cast(PctUsage1 as int) is null then case when CHARINDEX('.',PctUsage1) = 3 then cast(replace(PctUsage1, '.','') as Decimal(5,2))/100 when CHARINDEX('.',PctUsage1) = 2 then cast(replace(PctUsage1, '.','') as Decimal(5,2))/1000 end else try_cast(PctUsage1 as decimal(5,2))/100 end PctUsage1_converted,

【讨论】:

    猜你喜欢
    • 2013-12-26
    • 2015-07-04
    • 1970-01-01
    • 1970-01-01
    • 2012-02-21
    • 2010-12-31
    相关资源
    最近更新 更多