5

SQL 列の 1 つでテキストを置き換えようとしています。/*REPLACE*/置換するテキストは、次の文字が 5000 倍しなければならない数値であるすべての参照を見つけることで簡単に見つけることができます。

元の値の例を以下に示します。

var checkIn = moment(FIELD(/*REPLACE*/4,/*REPLACE*/9).GET());  
var checkOut = moment(FIELD(/*REPLACE*/4,/*REPLACE*/10).GET());    
if (checkIn > checkOut) {      
    FIELD(/*REPLACE*/4,/*REPLACE*/10).SET(checkIn.format("DD MMM YYYY"));      
    checkOut = moment(FIELD(/*REPLACE*/4,/*REPLACE*/10).GET());  
}    
FIELD(/*REPLACE*/4,/*REPLACE*/11).SET(parseFloat(checkOut.diff(checkIn, "days")).toFixed(2));

すべての参照を見つけて/*REPLACE*/、次の数値の文字を 5000 ずつ増やす必要があります。

新しい値の例を以下に示します。

var checkIn = moment(FIELD(5004,5009).GET());  
var checkOut = moment(FIELD(5004,5010).GET());    
if (checkIn > checkOut) {      
FIELD(5004,5010).SET(checkIn.format("DD MMM YYYY"));      
checkOut = moment(FIELD(5004,5010).GET());  
}    
FIELD(5004,5011).SET(parseFloat(checkOut.diff(checkIn, "days")).toFixed(2));

基本から始めましたが、テキストの後に数字を見つけるのに迷いました。

SELECT column.REPLACE(column, '/*REPLACE*/',

何か助けてください。

4

3 に答える 3

0

単純な CLR 関数を作成して、正規表現操作を行うことができます。SQL クエリで正規表現関数を使用できると、非常に役立ちます。

この記事をご覧ください: 正規表現によりパターン マッチングとデータ抽出がより簡単に

于 2013-06-26T17:22:53.580 に答える
0

本当に SQL Server でこれを行う必要があり、T-SQL を使用する必要がありますか? 第 3 世代のプログラミング言語 (C++、C#、VB.NET など) は、はるかに強力な文字列操作メソッドをサポートしています。たとえば、SQL Server にネイティブに実装されていない正規表現を使用できます。

この制限を回避するために SQL CLR 関数またはプロシージャを設計することもできますが、クライアント アプリケーションを使用する方がはるかに適切です。スクリプト変換で SQL Server Integration Services を使用することもできます (これには C# または VB.NET を使用できます)。

ML

于 2013-06-26T14:18:21.543 に答える