Sql 如果您试图按数量进行筛选或聚合,则仍然必须分析所有行以提取值。@panagiotiskanavos-Plz CheckNow@panagiotiskanavos-请现在检查 DECLARE @Value varchar(500) = 'Charge :
Sql 如果您试图按数量进行筛选或聚合,则仍然必须分析所有行以提取值。@panagiotiskanavos-Plz CheckNow@panagiotiskanavos-请现在检查 DECLARE @Value varchar(500) = 'Charge : ,sql,sql-server,tsql,sql-server-2017,Sql,Sql Server,Tsql,Sql Server 2017,如果您试图按数量进行筛选或聚合,则仍然必须分析所有行以提取值。@panagiotiskanavos-Plz CheckNow@panagiotiskanavos-请现在检查 DECLARE @Value varchar(500) = 'Charge : Landlord Rent Amount changed from 1300.00 to 1301.00 Daily Amount changed from 42.74 to 42.77' -- DECLARE @Value varc
如果您试图按数量进行筛选或聚合,则仍然必须分析所有行以提取值。@panagiotiskanavos-Plz CheckNow@panagiotiskanavos-请现在检查
DECLARE @Value varchar(500) = 'Charge : Landlord Rent Amount changed from 1300.00 to 1301.00 Daily Amount changed from 42.74 to 42.77'
-- DECLARE @Value varchar(500) = 'Charge : Landlord Rent Amount changed from 300.00 to 301.00 Daily Amount changed from 42.74 to 42.77'
SELECT
LEFT(name, charindex(' ', name) - 1) as FromAmount
from
(
SELECT
SUBSTRING(@Value,
CHARINDEX('Amount changed from', @Value) + 20,
CHARINDEX('Daily Amount', @Value, CHARINDEX('Amount changed from', @Value)) -
CHARINDEX('Amount changed from', @Value) - 20) AS name
) t1
SELECT
RIGHT(name, charindex('To ', name)) as ToAmount
from
(
SELECT
SUBSTRING(@Value,
CHARINDEX('Amount changed from', @Value) + 20,
CHARINDEX('Daily Amount', @Value, CHARINDEX('Amount changed from', @Value)) -
CHARINDEX('Amount changed from', @Value) - 20) AS name
) t1
DECLARE @Value varchar(500) = 'Charge : Landlord Rent Amount changed from 1300.00 to 1301.00 Daily Amount changed from 42.74 to 42.77'
SET @Value= REPLACE(@VALUE,SUBSTRING(@VALUE,CHARINDEX('Daily Amount changed from',@Value),LEN(@VALUE)),'')
--DECLARE @Value varchar(500) = 'Charge : Landlord Rent Amount changed from 300.00 to 301.00 Daily Amount changed from 42.74 to 42.77'
DECLARE @expres VARCHAR(50) = '%[:,~,@,#,$,%,&,*,(,),a-z,A-Z,!]%'
WHILE PATINDEX( @expres, @Value ) > 0
SET @Value = Replace(REPLACE( @Value, SUBSTRING( @Value, PATINDEX( @expres, @Value ), 1 ),''),'-',' ')
SELECT SUBSTRING(TRIM(@Value),1,CHARINDEX(' ',TRIM(@Value))) AS FROM_Amt ,SUBSTRING(TRIM(@Value),CHARINDEX(' ',TRIM(@Value)),LEN(TRIM(@Value))) AS To_Amt
DECLARE @Value varchar(500) = 'Charge : Landlord Rent Amount changed from 1300.00 to 1301.00 Daily Amount changed from 42.74 to 42.77'
;WITH cteXML AS(
SELECT CAST('<Charge>'
+ REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(@Value
,' '
,' '
)
,' Daily Amount changed from '
,'</to></Rent><Daily><from>'
)
,'Amount changed from '
,'<from>'
)
,' to '
,'</from><to>'
)
,'Charge : Landlord Rent '
,'<Rent>'
)
,' Daily Amount '
,'</to></Rent><Daily>'
)
+ '</to></Daily></Charge>' AS XML) AS ValueXml
),
cteXMLColumns AS(
SELECT ValueXml.value('(Charge/Rent/from)[1]', 'DECIMAL(19,4)') AS RentFrom
,ValueXml.value('(Charge/Rent/to)[1]', 'DECIMAL(19,4)') AS RentTo
,ValueXml.value('(Charge/Daily/from)[1]', 'DECIMAL(19,4)') AS DailyFrom
,ValueXml.value('(Charge/Daily/to)[1]', 'DECIMAL(19,4)') AS DailyTo
FROM cteXML
)
SELECT *
FROM cteXMLColumns