0

これらは私の2つのテーブルです

CREATE TABLE [dbo].[dailyRate](
[SYMBOL] [varchar](50) NULL,
[SERIES] [varchar](50) NULL,
[OPENPRICE] [varchar](50) NULL,
[HIGHPRICE] [varchar](50) NULL,
[LOWPRICE] [varchar](50) NULL,
[CLOSEPRICE] [varchar](50) NULL,
[LASTPRICE] [varchar](50) NULL,
[PREVCLOSE] [varchar](50) NULL,
[TOTTRDQTY] [varchar](50) NULL,
[TOTTRDVAL] [varchar](50) NULL,
[TIMESTAMPDAY] [varchar](50) NULL,
[TOTALTRADES] [varchar](50) NULL,
[ISIN] [varchar](50) NULL
)


CREATE TABLE [dbo].[cmpDailyRate](
[ID] [bigint] IDENTITY(1,1) NOT NULL,
[SYMBOL] [varchar](50) NULL,
[SERIES] [varchar](50) NULL,
[OPENPRICE] [decimal](18, 4) NULL,
[HIGHPRICE] [decimal](18, 4) NULL,
[LOWPRICE] [decimal](18, 4) NULL,
[CLOSEPRICE] [decimal](18, 4) NULL,
[LASTPRICE] [decimal](18, 4) NULL,
[PREVCLOSE] [decimal](18, 4) NULL,
[TOTTRDQTY] [bigint] NULL,
[TOTTRDVAL] [decimal](18, 4) NULL,
[TIMESTAMPDAY] [smalldatetime] NULL,
[TOTALTRADES] [bigint] NULL,
[ISIN] [varchar](50) NULL,
[M_Avg] [decimal](18, 4) NULL
) 

これは、キャストを使用してテーブルから別のテーブルにデータをフェッチするための挿入クエリです

折りたたむ | コードをコピー

INSERT into [Stock].[dbo].[cmpDailyRate]
SELECT [SYMBOL],[SERIES],Str([OPENPRICE], 18,4),Str([HIGHPRICE],18,4),
Str([LOWPRICE],18,4),Str([CLOSEPRICE],18,4),Str([LASTPRICE],18,4),Str([PREVCLOSE],18,4),convert(bigint,[TOTTRDQTY]),Str([TOTTRDVAL],18,4),
convert(date, [TIMESTAMPDAY], 105),convert(bigint,[TOTALTRADES]),[ISIN],null
FROM [Stock].[dbo].[DailyRate]

このクエリは SQL Server 2005 では完全に実行されますが、SQL Server 2008 ではエラーが発生します (上記のクエリはインストール時に SQL Server 2008 でも実行されます。ここ数日でエラーが発生します)。

エラー :

エラーで varchar を float に変換できません

何をすべきか?

4

2 に答える 2

1

行の 1 つに、float 変換 (Str) を実行している列に無効なデータが含まれています。次の戦略を使用して、どれを解決しますか。

SELECT *
FROM [dailyRate]
WHERE IsNumeric([OPENPRICE]) = 0
OR IsNumeric([HIGHPRICE]) = 0

などなど

于 2013-03-08T11:30:31.403 に答える
0

データを除外したくない場合は、CASE ステートメントの方が適している場合があります。

SELECT CASE 
        WHEN IsNumeric([OPENPRICE]) = 1 THEN [OPENPRICE]
        ELSE NULL -- or 0 or whatever
       END AS OPENPRICE,
       CASE 
        WHEN IsNumeric([HIGHPRICE]) = 1 THEN [HIGHPRICE]
        ELSE NULL -- or 0 or whatever
       END AS [HIGHPRICE]
FROM [dailyRate]
于 2013-03-08T14:19:12.840 に答える