4

浮動小数点として格納されている緯度と経度のテーブルがあります。緯度列の小数点以下の桁数をどのように数えますか? データは次のようになります。

    DECLARE @MyData TABLE (ID, Latitude float, Longitude float)
    INSERT @MyData

    SELECT 'A', 33.11, -55.2235 UNION ALL
    SELECT 'B', 33.6407760431,-87.0002760543 UNION ALL
    SELECT 'C', 42.2997,-70.9081; 

そして、私はこれが欲しいでしょう

    ID    |   LatitudeNumberOfDigits
     A    |    2
     B    |   10
     C    |    4

私はそれをテキストに変換し、 を使用して分割しようとしていました。区切り文字として使用しましたが、CONVERT は期待どおりに機能しませんでした。有効数字4桁に丸める

    SELECT ID, Latitude, Longitude, 
    CONVERT(varchar(max),[Latitude]) AS LatText 
    FROM @MyData

私にくれた

     ID Latitude    Longitude        LatText
     A  33.11           -55.2235         33.11
     B  33.6407760431   -87.0002760543   33.6408
     C  42.2997         -70.9081         42.2997

ありがとう !

4

6 に答える 6

3

これを試してください (浮動小数点数の小数点以下の桁数が最大 10 であることを前提としています。それ以外の場合は STR の値を調整してください)。

WITH MyData (ID, Latitude, Longitude)
AS
(
    SELECT 'A', CAST(33.11 AS FLOAT), CAST(-55.2235 AS FLOAT) UNION ALL
    SELECT 'B', 33.6407760431,-87.0002760543 UNION ALL
    SELECT 'C', 42.2997,-70.9081 
)
SELECT ID, Latitude, Longitude, 
    LEN(CAST(REVERSE(SUBSTRING(STR([Latitude], 13, 11), CHARINDEX('.', STR([Latitude], 13, 11)) + 1, 20)) AS INT)) AS LatText  
FROM MyData

ただし、他の人が指摘しているように、FLOAT は頭痛の種になる可能性があります。たとえば、次のように考えてください。

SELECT STR(33.11, 20,17) -- result: 33.1099999999999990
于 2012-01-17T23:12:53.963 に答える
1

あなたはそうしない。小数点以下の桁数は、SQLのfloatのサイズによって決まります。表示する数は、フロートのフォーマット方法によって決まります。

于 2012-01-17T23:04:32.230 に答える
1

FLOAT ではなく DECIMAL を使用します。

DECLARE @a FLOAT = 33.6407760431
SELECT CAST(@a AS VARCHAR(100))

DECLARE @b DECIMAL(22,10) = 33.6407760431
SELECT CAST(@b AS VARCHAR(100))

戻り値:

33.6408

33.6407760431
于 2012-01-18T03:59:48.610 に答える
0

これは有効なtsqlではない可能性がありますが、近くなります。

SELECT LENGTH(CONVERT(varchar(255), Latitude - CAST (Latitude as int))) AS decimal_place_count 
于 2012-01-17T23:03:52.540 に答える
0

またはのSTR代わりに 関数を使用します。これにより、小数点以下の桁数と文字列の全長をより詳細に制御できます。STR (Transact-SQL)を参照してください。CONVERTCAST

LEN(RTRIM(REPLACE(STR(Latitude,15,10),'0',' '))) - 5
于 2012-01-17T23:09:15.330 に答える