需要有关此SQL的帮助吗
问题是:需要有关此SQL的帮助吗,sql,sql-server,sql-server-2005,tsql,string,Sql,Sql Server,Sql Server 2005,Tsql,String,问题是: +--------------+ Ships | +--------------+ Duke of north | ---------------+ Prince of Wales| ---------------+ Baltic | ---------------+ 我需要用星号(*)的符号替换第一个和最后一个空格(不包括这些空格)之间的所有字符。星号的数量必须等于替换字符的数量 例如:“北方公爵”必须替换为“北方公爵”, 我设法从“北方公爵”中
+--------------+
Ships |
+--------------+
Duke of north |
---------------+
Prince of Wales|
---------------+
Baltic |
---------------+
我需要用星号(*)的符号替换第一个和最后一个空格(不包括这些空格)之间的所有字符。星号的数量必须等于替换字符的数量
例如:“北方公爵”必须替换为“北方公爵”,
我设法从“北方公爵”中删掉了“of”,但我真的被替换部分卡住了,有人能给我一些想法吗?我正在MS SQL Server 2005中学习SQL,请帮助。
我不需要确切的答案只要给我一些想法
select
case when charindex(' ',ship,(charindex(' ',ship,1))+1) > 0
then substring(ship,(charindex(' ',ship,1))+1,((charindex(' ',ship,(charindex(' ',ship,1))+1)) - (charindex(' ',ship,1))))
end "Replace"
from
outcomes
这不是一个家庭作业问题,我正在学习SQL。学习SQL的一部分是学习识别不应该在SQL中执行的任务。这应该作为显示逻辑的一部分保留,并且应该远离数据库引擎。学习SQL的一部分是学习识别不应该在SQL中执行的任务。这应该作为显示逻辑的一部分保留,并且应该远离数据库引擎
select
isnull(case when charindex(' ',ship,(charindex(' ',ship,1))+1) > 0
then substring(ship,1,charindex(' ',ship,1))+space(1)+replace(substring(ship,(charindex(' ',ship,1))+1,((charindex(' ',ship,(charindex(' ',ship,1))+1)) - (charindex(' ',ship,1)))),substring(ship,(charindex(' ',ship,1))+1,((charindex(' ',ship,(charindex(' ',ship,1))+1)) - (charindex(' ',ship,1)))),replicate('*',len(substring(ship,(charindex(' ',ship,1))+1,(charindex(' ',ship,(charindex(' ',ship,1))+1)) - (charindex(' ',ship,1))))))+space(1)+substring(ship,(charindex(' ',ship,(charindex(' ',ship,1))+1)),(len(ship)))
end,ship) "Replace"
from
outcomes
经过长时间的尝试,我自己得到了答案
SELECT
CASE WHEN ship NOT LIKE '% % %' THEN ship
ELSE
LEFT(ship,CHARINDEX(' ',ship)) +
REPLICATE('*', LEN(ship)- CHARINDEX(' ',REVERSE(ship)) - CHARINDEX(' ',ship)) +
RIGHT(ship, CHARINDEX(' ',REVERSE(ship)))
END
FROM outcomes
经过长时间的尝试,我自己得到了答案
SELECT
CASE WHEN ship NOT LIKE '% % %' THEN ship
ELSE
LEFT(ship,CHARINDEX(' ',ship)) +
REPLICATE('*', LEN(ship)- CHARINDEX(' ',REVERSE(ship)) - CHARINDEX(' ',ship)) +
RIGHT(ship, CHARINDEX(' ',REVERSE(ship)))
END
FROM outcomes
如果您通常需要选择此修改表单中的数据,可以添加一个计算列,如下所示
ALTER TABLE dbo.outcomes ADD
displayName AS CASE WHEN ship NOT LIKE '% % %' THEN ship
ELSE
LEFT(ship,CHARINDEX(' ',ship)) +
REPLICATE('*', LEN(ship)- CHARINDEX(' ',REVERSE(ship)) - CHARINDEX(' ',ship)) +
RIGHT(ship, CHARINDEX(' ',REVERSE(ship)))
END PERSISTED
如果您通常需要选择此修改表单中的数据,可以添加一个计算列,如下所示
ALTER TABLE dbo.outcomes ADD
displayName AS CASE WHEN ship NOT LIKE '% % %' THEN ship
ELSE
LEFT(ship,CHARINDEX(' ',ship)) +
REPLICATE('*', LEN(ship)- CHARINDEX(' ',REVERSE(ship)) - CHARINDEX(' ',ship)) +
RIGHT(ship, CHARINDEX(' ',REVERSE(ship)))
END PERSISTED
什么意思?我一直在使用SQL来查看日期是否在某个范围内。因此,您从未需要更新列值来替换文本?有趣的答案。设想一个企业数据库,其中数据由具有不同访问级别的许多应用程序和用户共享。我认为有必要通过
VIEW
s向那些有能力编写SQL查询但有权查看机密信息但需要视觉反馈的用户提供部分模糊数据。你是什么意思?我一直在使用SQL来查看日期是否在某个范围内。因此,您从未需要更新列值来替换文本?有趣的答案。设想一个企业数据库,其中数据由具有不同访问级别的许多应用程序和用户共享。我认为有必要通过VIEW
s向能够编写SQL查询但有权查看机密信息的用户提供部分模糊数据,但这些用户需要视觉反馈,以确定他们是否在查看正确的数据。因此,如果“北公爵”变为“北公爵**”,那么“波罗的海”会有什么期待和“Ships”?CHARINDEX将返回第一个空格字符的位置。您必须使用该函数两次,使用第一个实例位置作为第二次检查的起点……这通常由正则表达式替换处理,在SQL Server 2005+上需要使用CLR函数。因此,如果“北公爵”变为“北公爵**”,您对“波罗的海”和“船舶”的期望是什么?CHARINDEX将返回第一个空格字符的位置。您必须使用该函数两次,使用第一个实例位置作为第二次检查的起点……这通常由正则表达式替换来处理,SQL Server 2005+上需要使用CLR函数