1

テキストをフロートとして保存したい。私の問題は、このテキストがさまざまな形式で提供されていることです。私はそれに影響を与えることはできません。私の TEXT 列には次のような文字列が含まれています

357000

218000.56

500.000.00

最初の 2 つの文字列の変換に問題はありません。小数点は桁区切り記号と同じ文字であるため、最後のものを変換する際に問題があります。

この問題にどう対処すればよいですか?定義できる形式を使用して、文字列から浮動小数点数への明示的な変換はありますか?

編集:上記の場合、最後の . (存在する場合) は、その後に 2 桁の数字が続く場合、常に小数点記号です。たとえば、「153.650」は 153650 に変換されます。

4

4 に答える 4

1

「編集: 上記の場合、最後の . (存在する場合) は、その後に 2 桁の数字が続く場合、常に > 小数点区切り記号であると言うのを忘れていました。したがって、「153.650」は >153650 に変換する必要があります。例。"

あなたの答えがあります。

インデックス (yourString.Length - 3) の文字が区切り文字の 1 つであるかどうかを確認します。そうであれば、10 進数の値があります。そうでなければ、あなたはしません。不要な記号をすべて取り除き、選択した小数点記号を正しいインデックスに再挿入します。

掃除?いいえ、しかし状況は悪臭を放っています、TBH。

于 2013-09-09T16:45:50.690 に答える
0

SQL フィドル

MySQL 5.5.32 スキーマのセットアップ:

CREATE TABLE Table1
    (`TEXT` varchar(10))
;

INSERT INTO Table1
    (`TEXT`)
VALUES
    ('357000'),
    ('218000.56'),
    ('500.000.00')
;

クエリ 1 :

SELECT CAST(concat(
       REPLACE(CASE WHEN substr(TEXT,-3,1) = "." THEN substr(TEXT,1,length(TEXT)-3)
            ELSE TEXT END,'.',''),
       CASE WHEN substr(TEXT,-3,1) = "." THEN right(TEXT,3) 
            ELSE '' END) AS decimal(12,2)
       ) AS Amount
FROM Table1

結果

|    AMOUNT |
|-----------|
|    357000 |
| 218000.56 |
|    500000 |
于 2013-09-09T17:13:40.857 に答える
0

あなたはこれを試すことができます

CONVERT(
REPLACE(REPLACE(value, '.', ''), ',', '.'), 
DECIMAL(10,2)) 

これは を置き換えます。そして、あなたの文字列から、それを10進数(10,2)に変換します。あなたによると

SELECT 
  IF(
    LENGTH(
      SUBSTRING_INDEX('351.000', '.', - 1)
    ) >= "3",
    CONVERT(
      REPLACE("351.000", ".", ''),
      DECIMAL (10, 2)
    ),
    CONVERT(
      CONCAT(
    REPLACE(
      LEFT(
        '351.000',
        LENGTH("351.000") - LOCATE('.', REVERSE("351.000"))
      ),
      '.',
      ''
    ),
    CONCAT(
      ".",
      SUBSTRING_INDEX('351.000', '.', - 1)
    )
      ),
      DECIMAL (10, 2)
    )
  ) 

私は試してみました

1234.56 は 1234.56 を与える

1234.000.00 は 1234000.00 を与えます

そして 1234.000 は 1234000 を与えます

しかし、mysql クエリで多くのことを行うのは良い方法ではありません。プログラミング部分で処理する必要があります

于 2013-09-09T15:58:54.590 に答える