2016-03-26 7 views
0

ich eine Zeichenfolge wie diese:Regex ersetzen für bestimmte Bedingung

„(Extent2.pending_DLU> CAST ('2015.05.26 00: 00: 00,00000' AS Zeitstempel)) (Extent1. status_DLU> CAST ('2015-05-26 00: 00: 00.00000' AS Zeitstempel)) und (Extent1.RQST_SUBMT_TS = CAST ('2015-05-26 00: 00: 00.00000' AS Zeitstempel) oder (Extent2.WOstatus > CAST ('2015.05.26 00: 00: 00,00000' AS Zeitstempel))“

ich mit 'date', außer wenn die Spalte ersetzen 'Zeitstempel' wollen RQST_SUBMT_TS.

Erwartete Leistung:

„(Extent2.pending_DLU> CAST ('2015.05.26 00: 00: 00,00000' AS Datum)) (Extent1.status_DLU> CAST ('2015-05 -26 00: 00: 00.00000 'AS Datum)) und (Extent1.RQST_SUBMT_TS = CAST (' 2015-05-26 00: 00: 00.00000 ' Zeitstempel AS) oder (Extent2.WOstatus> CAST (' 2015-05- 26 00: 00: 00,00000' AS date))“

ich habe die folgende Regex, aber es ist nicht korrekt:

012.351.
/timestamp\b!([A-Za-z0-9()\s]+.RQST_SUBMT_TS\s[<>=]?[<>=]\sCAST\(\'\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}.\d{5}\'\sAS\stimestamp)+/g 

Könnte jemand mir bitte helfen, das richtige Regexmuster herauszufinden, um dies zu tun?

Bearbeiten: Um etwas Hintergrund zu geben. Ich bin mit dem gleichen Problem konfrontiert hier genannt Dynamic Expression Casting DateTime as timestamp. Als Workaround bekomme ich die Abfrage und versuche, 'Zeitstempel' durch 'Datum' zu ersetzen. aber es muss nur für Spalten mit DATE-Datentypen gemacht werden.

+1

muss dies mit regulären Ausdrücken zu tun? – Eminem

+0

@Eminem Ich bin offen für unterschiedliche Ansatz zu. – AruRen

Antwort

1

Getestet diesen Code

string Data = "(Extent2.pending_DLU > CAST('2015-05-26 00:00:00.00000' AS timestamp))​ (Extent1.status_DLU > CAST('2015-05-26 00:00:00.00000' AS timestamp)) and (Extent1.RQST_SUBMT_TS = CAST('2015-05-26 00:00:00.00000' AS timestamp) or (Extent2.WOstatus > CAST('2015-05-26 00:00:00.00000' AS timestamp))"; 
var pattern = @"timestamp|RQST_SUBMT_TS.*?timestamp"; 
var cleanedUpValue = Regex.Replace(Data, pattern, m => m.Value.Length > "timestamp".Length ? m.Value : "date"); 

Ausgabe

(Extent2.pending_DLU > CAST('2015-05-26 00:00:00.00000' AS date))​ (Extent1.status_DLU > CAST('2015-05-26 00:00:00.00000' AS date)) and (Extent1.RQST_SUBMT_TS = CAST('2015-05-26 00:00:00.00000' AS timestamp) or (Extent2.WOstatus > CAST('2015-05-26 00:00:00.00000' AS date))

+1

Danke, es hat funktioniert !! – AruRen

0

Versuchen Sie, die folgenden

/\(([A-Za-z0-9()\s]+.RQST_SUBMT_TS\s[<>=]?[<>=]\sCAST\(\'\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}.\d{5}\'\sAS\stimestamp)+g 

timestamp\b! Ersetzt durch \(
CAST(\' Ersetzt durch CAST\(\'

0

Die folgende einfache regex entspricht Zeitstempel in Ihrem Beispiel, aber ich bin nicht sicher, ob es flexibel genug ist, für Sie:

(?<!RQST_SUBMT_TS.{39})timestamp