【问题标题】:Remove white spaces from string in sql从sql中的字符串中删除空格
【发布时间】:2018-06-18 13:34:59
【问题描述】:
SELECT CONVERT(DECIMAL(18,2)
               ,ROUND(  REPLACE
                        (
                          REPLACE(
                                   SUBSTRING([ColumnName],0, CHARINDEX(' ',[ColumnName],1) )
                                   ,'$',''
                                 )
                          ,',',''
                        ) 
                        ,2
                      )
               ) AS 'ColumnName' 
       ,[ColumnName]
       ,* 
FROM TABLENAME

CHARINDEX 返回空间索引,但当数据中没有空间时,它返回 0。我想要的是当结尾数据有空格时,SUBSTRING 应该考虑这一点,当没有空格时,它应该考虑字符串的长度。

【问题讨论】:

  • 您使用的是哪个 dbms。 (几个产品特定的功能。)
  • 我不确定你最后一句是什么意思。您可以添加一些示例数据来说明吗?此外,看起来您正在使用 sql-server (因为您使用括号)。在 sql-server 中(至少),substring 是基于 1,而不是 0,因为您正在使用它。
  • 对我来说,它读到你想在最后删除空格,如果是这样你可以使用 RTRIM() 在看起来你正在使用的 sql server 上

标签: sql substring charindex


【解决方案1】:

您似乎正在使用 SQL Server,那么我想应用 case 表达式

case when CHARINDEX(' ',[ColumnName],1) > 0 
     then CHARINDEX(' ',[ColumnName],1) 
     else len([ColumnName]) end

【讨论】:

    【解决方案2】:

    显然您正在使用 sql-server 并希望将 $123,456,789.99 之类的字符串转换为 DECIMAL

    TRY_PARSE 应该会得到你想要的结果:

    SELECT
    TRY_PARSE(REPLACE('$123,456,789.99   ', '$', '')
              AS DECIMAL(18,2)
              USING 'en-US') AS myDecimalNumber
    

    或者,如果您可以选择使用 MONEY 数据类型,您可以省略 REPLACE

    SELECT
    TRY_PARSE('$123,456,789.99   '
              AS MONEY
              USING 'en-US')) AS myDecimalNumber
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-27
      • 2020-02-02
      • 2017-11-20
      • 2012-12-22
      相关资源
      最近更新 更多