我正在尝试使用@@VERSION
更新我使用Windows版本的SQL Server的表。当我运行SELECT @@VERSION
时,我得到了
Microsoft SQL Server 2012 - 11.0.5058.0 (X64)
May 14 2014 18:34:29
Copyright (c) Microsoft Corporation
Standard Edition (64-bit) on Windows NT 6.3 <X64> (Build 9600: ) (Hypervisor)
在这种情况下,我想要&#34; Windows NT 6.3&#34; (14个字符长)永远不会改变我总是想要14个字符&#34; Windows NT (某个版本) &#34;。
有时当我向某些服务器查询&#34;(管理程序)&#34;在那14个字符之后不存在或者括号和文本是不同的。我想自动执行此操作,我需要找到一种方法来提取&#34; Windows NT (某些版本) &#34;。
答案 0 :(得分:1)
charindex()
可让您找到字符串中子字符串的位置。它还允许您指定第三个参数以在字符串的中间开始搜索,这允许我们找到相对于另一个位置的匹配。我们会多次使用该功能。
我们需要知道所需字符串的开头及其结尾。因此,我们将搜索锚定到长度为11个字符的字符串"Windows NT "
。然后我们想在匹配后立即找到下一个空格字符。为此值添加11是必要的,因此它无法在锚定匹配中找到空格字符(在&#34; NT&#34;之前和之后)。
charindex('Windows NT ', @@version) /* start of match */
charindex(' ', @@version, charindex('Windows NT ', @@version) + 11) /* end of match */
这两个表达式标识字符串偏移量,但substring()
需要知道要提取的长度,这意味着它需要知道偏移量之间的差异。由于我们不希望返回值中包含最终空格字符,因此无需添加一个字符来包含它。
substring(
@@version,
charindex('Windows NT ', @@version),
charindex(' ', @@version, charindex('Windows NT ', @@version) + 11)
- charindex('Windows NT ', @@version)
)
答案 1 :(得分:0)
如果您知道它将始终是Windows,您可以使用该事实来搜索Windows上的位置&#34;&#34;在该字符串中,因为它应该始终只存在一次。一旦知道起始位置,就可以使用子字符串并调整参数,使字符串&#34; on&#34;被删除然后只拉你的14个字符。
IE:
声明@str varchar(500)=&#39; Microsoft SQL Server xxx(SPy) - 10.0.5500.0
(X64)
2011年9月21日22:45:45
版权所有(c)1988-2008 Microsoft Corporation
Windows NT 6.1上的标准版(64位)(Build 7601:Service Pack
1)(VM)
&#39;
选择@str
选择SUBSTRING(@str,CHARINDEX(&#39;在Windows&#39;,@ str,1)+ 3,14)