【发布时间】:2017-09-18 21:37:11
【问题描述】:
我已经尝试了很多次,但还没有找到确切的查询。 我制作的那个在几个字符串中工作,但在另一个字符串中不起作用(不确定)。
我想要的是其中包含'.' 的单词,例如"abcde sfjhjk.dkjb sajb njdhf",我想要的是"sfjhjk.dkjb" 作为结果。这只是一个例子。
查询在某些情况下会返回所有字母,而在其他情况下会截断少数数字。您可以通过提供不同的值进行检查。
我在下面尝试过:
这不起作用:
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 @NAME+@ALIAS,@NAME,REVERSE(LEFT(REVERSE(@ALIAS),LEN(@ALIAS)-1))
SET @QUERY=REPLACE(@QUERY,@NAME+@ALIAS,'')
END
SELECT * FROM @COLUMNS_JOIN
这行得通:
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 @NAME+@ALIAS,@NAME,REVERSE(LEFT(REVERSE(@ALIAS),LEN(@ALIAS)-1))
SET @QUERY=REPLACE(@QUERY,@NAME+@ALIAS,'')
END
SELECT * FROM @COLUMNS_JOIN
有人可以帮忙吗。
【问题讨论】:
-
我的方法是创建一个临时表,将所有空格字符的索引存储在一个字符串中。然后你查询一个点,在结果中你可以用一个简单的子字符串提取你需要的东西。倒车总是很棘手。
-
我喜欢你的想法@PacoDePaco 我会去看看它是否有效:)
标签: sql-server tsql