2

タブ区切りのテキスト ファイルを読み込もうとしています。このファイルには、たまたま日付のように見える値の列が含まれていますが、そうではありません。CSVREADコマンドは行をスキャンし、列のテキスト値をjava.Sql.Dateに変換し、ターゲット列がVARCHARであることを確認し、toString()を実行して値を取得するようです...これは正確に私が必要とするものではありません。実際には、日付処理がまったく行われていない生の未変換のテキストが必要です。

では、CSVREAD コマンドで「役立つ日付のような列変換」をオフにする方法はありますか?

望ましくない動作を示すために作成できる最も単純なケースを次に示します。

CREATE TABLE x
  (
    name VARCHAR NOT NULL
    value VARCHAR
  ) AS
  SELECT *  CSVREAD('C:\myfile.tab', null, 'UTF-8', chr(9))
;

このファイルには、ヘッダーと値の 2 つのレコードの 3 つの行が含まれています。

name\tvalue\n
x\t110313\n
y\t102911\n

CVSREAD の役に立たない部分を回避する方法についての支援をいただければ幸いです。ありがとうございました。

4

2 に答える 2

4

(あなたはこれを自分で見つけたようですが、とにかく):

の場合CSVREAD、すべての列は文字列です。CSVREAD関数またはデータベースは、値を日付に変換したり、他の方法でデータ型を検出したりしませんデータベースは、あなたが要求したことだけを行います。これは、データを文字列として読み取ることです。

列を日付に変換したい場合は、明示的に行う必要があります。次に例を示します。

CREATE TABLE x(name VARCHAR NOT NULL, value TIMESTAMP) AS
SELECT * 
FROM CSVREAD('C:\myfile.tab', null, 'UTF-8', chr(9));

デフォルト以外の解析が必要な場合は、次を使用できます。

CREATE TABLE x(name VARCHAR NOT NULL, value TIMESTAMP) AS
SELECT "name", parsedatetime("value", "M/d/y") as v 
FROM CSVREAD('C:\myfile.tab', null, 'UTF-8', chr(9));
于 2013-04-06T05:50:14.473 に答える
2

csv ファイルにヘッダーがない場合、例は次のようになります。

CREATE TABLE x(name VARCHAR NOT NULL, value TIMESTAMP) AS
SELECT "0", parsedatetime("1", 'd-M-yyyy') as v 
FROM CSVREAD('C:\myfile.tab', '0|1', 'UTF-8', '|');

日付形式を一重引用符で囲むことに注意してください。Thomas の例を試してみると、H2 を使用するとエラーが発生しました。

列「dM-yyyy」が見つかりません。SQL ステートメント:

私のcsvファイル:

firstdate|13-11-2013\n
seconddate|14-11-2013
于 2013-12-12T07:07:54.290 に答える