0

col_1 と col_2 の 2 つの varchar 列を比較しようとしています。

col_1
A
A
A
1.0
2.0

col_2
A
A
A
1
2

1.0 と 1 が等しい値であることを確認する必要があります。1.5 のような有効な値が存在する可能性があるため、それらを整数に変換することはできません...

任意のヒント?

float へのキャストは 1.0 に変換されず、1 として保存されます。

  select cast(v as float)from 
  (select 1 as v) tb1
4

4 に答える 4

1

Does this solve your issue ?

Select CASE isnumeric(col_1)
    WHEN 1 THEN CAST(CAST(col_1 as DECIMAL(20,10)) as varchar(50))
    ELSE col_1
END

When you join with col_2 apply the same treatment to col_2. In your example 'A' will stay as 'A', and 1 will be '1.0000000000' in both columns.

于 2013-07-24T14:59:36.280 に答える
0

次のようなことを試してください:

SELECT 'YES'
FROM sys.tables
WHERE CAST(1 as float) = 1.0

このCASTステートメントを使用して、Integer を一時的に Float にキャストできます。

于 2013-07-24T14:43:06.040 に答える
0

整数には変換できませんが、浮動小数点数には変換できます。それでも何らかの理由で小数点以下を比較したい場合は、次のようにします。

STR(col_1,LEN(col_1),1)

例:

DECLARE @a varchar(10),
    @b varchar(25)
SET @a = '123.00'
SET @b = '000123.000'

SELECT 
CASE
    WHEN RTRIM(LTRIM(STR(@a,LEN(@a)+2,1))) = RTRIM(LTRIM(STR(@b,LEN(@b)+2,1))) THEN 1
    ELSE 0
END

それ以外の場合、このクエリは true を返すため、通常の CONVERT/CAST に固執します。

SELECT 
CASE
    WHEN CAST('1.0' AS FLOAT) = CAST('1' AS FLOAT) THEN 1
    ELSE 0
END
于 2013-07-24T14:42:33.760 に答える