Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
需要有关此SQL的帮助吗_Sql_Sql Server_Sql Server 2005_Tsql_String - Fatal编程技术网

需要有关此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函数