Ich habe so oft versucht, aber konnte die genaue Abfrage noch nicht finden. Der eine, den ich gemacht habe, arbeitet in wenigen Strings, funktioniert aber nicht in einem anderen (es ist ungewiss).Finden Sie ein Wort in einer Zeichenfolge mit einem Zeichen
Was ich will ist das Wort, das darin hat wie "abcde sfjhjk.dkjb sajb njdhf"
, was ich will, ist als Ergebnis. Dies ist nur ein Beispiel.
Die Abfrage gibt in einigen Fällen alle Buchstaben zurück, während in anderen Fällen einige Ziffern abgeschnitten werden. Sie können dies überprüfen, indem Sie verschiedene Werte angeben.
Ich versuchte unter:
Dies funktioniert nicht:
DECLARE @QUERY VARCHAR(MAX)='
renewreque0_.amount AS AMOUNT48_,
renewreque0_.charge_type AS CHARGE3_48_,
renewreque0_.commission_rate AS COMMISSION4_48_
'
SET NOCOUNT ON;
DECLARE @TABLENAME TABLE(TABLE_NAME VARCHAR(MAX),ALIAS VARCHAR(MAX))
DECLARE @COLUMNS_JOIN TABLE(COL VARCHAR(MAX),COLUMN_NAME VARCHAR(MAX),ALIAS VARCHAR(MAX))
DECLARE @NAME VARCHAR(MAX),@ALIAS VARCHAR(MAX),@J_QUERY VARCHAR(MAX),@W_QUERY VARCHAR(MAX)
DECLARE @WHERE_JOIN TABLE(COL VARCHAR(MAX),COLUMN_NAME VARCHAR(MAX),ALIAS VARCHAR(MAX))
WHILE CHARINDEX('.',@QUERY)>1
BEGIN
SET @NAME = REVERSE(SUBSTRING(REVERSE(@QUERY),CHARINDEX('.',REVERSE(@QUERY))+1,CHARINDEX(' ',@QUERY)) )
SET @ALIAS= REVERSE(LEFT(REVERSE(@QUERY),CHARINDEX('.',REVERSE(@QUERY))))
SET @ALIAS=LEFT(@ALIAS,CHARINDEX(' ',@ALIAS))
SET @NAME=LTRIM(RTRIM(@NAME))
SET @ALIAS=LTRIM(RTRIM(@ALIAS))
INSERT INTO @COLUMNS_JOIN SELECT @[email protected],@NAME,REVERSE(LEFT(REVERSE(@ALIAS),LEN(@ALIAS)-1))
SET @QUERY=REPLACE(@QUERY,@[email protected],'')
END
SELECT * FROM @COLUMNS_JOIN
Dies funktioniert:
DECLARE @QUERY VARCHAR(MAX)='
AND t8_.username LIKE ?
AND t4_.branch_id = ?
AND t1_.account_no = ?
AND t0_.remarks = ?
AND t0_.collect_from = ?
'
SET NOCOUNT ON;
DECLARE @TABLENAME TABLE(TABLE_NAME VARCHAR(MAX),ALIAS VARCHAR(MAX))
DECLARE @COLUMNS_JOIN TABLE(COL VARCHAR(MAX),COLUMN_NAME VARCHAR(MAX),ALIAS VARCHAR(MAX))
DECLARE @NAME VARCHAR(MAX),@ALIAS VARCHAR(MAX),@J_QUERY VARCHAR(MAX),@W_QUERY VARCHAR(MAX)
DECLARE @WHERE_JOIN TABLE(COL VARCHAR(MAX),COLUMN_NAME VARCHAR(MAX),ALIAS VARCHAR(MAX))
WHILE CHARINDEX('.',@QUERY)>1
BEGIN
SET @NAME = REVERSE(SUBSTRING(REVERSE(@QUERY),CHARINDEX('.',REVERSE(@QUERY))+1,CHARINDEX(' ',@QUERY)) )
SET @ALIAS= REVERSE(LEFT(REVERSE(@QUERY),CHARINDEX('.',REVERSE(@QUERY))))
SET @ALIAS=LEFT(@ALIAS,CHARINDEX(' ',@ALIAS))
SET @NAME=LTRIM(RTRIM(@NAME))
SET @ALIAS=LTRIM(RTRIM(@ALIAS))
INSERT INTO @COLUMNS_JOIN SELECT @[email protected],@NAME,REVERSE(LEFT(REVERSE(@ALIAS),LEN(@ALIAS)-1))
SET @QUERY=REPLACE(@QUERY,@[email protected],'')
END
SELECT * FROM @COLUMNS_JOIN
Kann jemand bitte helfen.
Mein Ansatz wäre, eine temporäre Tabelle zu erstellen, die Indizes aller Leerzeichen in einer Zeichenfolge speichert. Dann fragen Sie nach einem Punkt und im Ergebnis können Sie mit einem einfachen Teilstring extrahieren, was Sie brauchen. Umkehr ist immer schwierig. – PacoDePaco
Ich mochte Ihre Idee @PacoDePaco Ich werde dafür gehen und überprüfen, ob es funktioniert :) –