1

Windows Server 2008 R2 標準 (sp1) の 64 ビット バージョンで SQL Server Standard 2008 R2 を実行しています。

ログ ファイルをフラット ファイル ソースとしてインポートしました。col2というテーブルで呼び出されたインポートからの列の 1 つは、次のbigような値を保持します: 16/Mar/2007:11:30:17as varchar(50)

col2その列 ( ) をdatetimeデータ型 に変換したいと考えています。

私が試みていた方法の 1 つは、日付文字列の各部分を抽出し、それらを再結合して変換することでした。

私が遭遇した問題は、ログ ファイルをきちんと区切ることができずCHARINDEX、1 桁または場合によっては NULL を返すようなものを使用して、各列の幅が異なることです。

CLR 統合を使用して正規表現を使用してセットアップしようとしましたが、機能しません (Visual Studio で C# プロジェクトを作成できません。そのためのオプションはありません)。また、SQL が原因でマスター データ サービスがインストールされません。 Server 2008 R2 Standard ではサポートされていません。

これを行うための最良の方法は何ですか? CASESUBSTRINGおよびCHARINDEX? _

4

4 に答える 4

3

これを試して

DECLARE @d varchar(50) = '16/Mar/2007:11:30:17'

SELECT CAST(STUFF(@d,CHARINDEX(':',@d),1,' ')  AS DATETIME)
于 2012-09-04T20:34:16.047 に答える
2

私はEricZのアイデアが好きでしたが、ここに私の解決策があります

DECLARE @d varchar(50) = '16/Mar/2007:11:30:17'
SELECT CAST( LEFT(@d,PATINDEX('%:%',@d) - 1) + ' ' +  SUBSTRING(@d,PATINDEX('%:%',@d) + 1,LEN(@d)) AS DATETIME)
于 2012-09-05T08:51:08.103 に答える
1
select convert(datetime, 
       SUBSTRING('16/Mar/2007:11:30:17', 0, CHARINDEX(':', '16/Mar/2007:11:30:17')) + ' ' +
       SUBSTRING('16/Mar/2007:11:30:17', CHARINDEX(':', '16/Mar/2007:11:30:17') + 1, 8) , 1)
于 2012-09-04T19:30:40.573 に答える
0

これを試してください>

select convert(datetime,STUFF(big,CHARINDEX(':',big),1,' '),101) from yourtable

例:ここでデータタイム文字列形式を確認してください。同じであれば動作します

DECLARE @d varchar(50) = '16/Mar/2007:11:30:17'
select convert(datetime,STUFF(@d,CHARINDEX(':',@d),1,' '),101)
于 2012-09-05T06:07:01.403 に答える