SELECT CONVERT(DECIMAL(18,2)
,ROUND( REPLACE
(
REPLACE(
SUBSTRING([ColumnName],0, CHARINDEX(' ',[ColumnName],1) )
,'$',''
)
,',',''
)
,2
)
) AS 'ColumnName'
,[ColumnName]
,*
FROM TABLENAME
CHARINDEX
返回空间索引,但当数据中没有空格时,它返回0
。我想要的是,当最终数据中有空格时,SUBSTRING
应该考虑到这一点,当没有空格时,它应该考虑字符串的长度。
答案 0 :(得分:0)
您似乎正在使用SQL Server,然后我想应用case
表达式
case when CHARINDEX(' ',[ColumnName],1) > 0
then CHARINDEX(' ',[ColumnName],1)
else len([ColumnName]) end
答案 1 :(得分:0)
显然您正在使用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