所以我正在编写一份报告,将所有版本的adobe acrobat pro整合到一个sql报告中。我遇到的问题是Adobe将其命名约定从版本更改为版本。有些显示'Adobe Acrobat 7.1.0 Professional',而其他显示'Adobe Acrobat 9 Pro'。我的问题是我可以在另一栏中显示该版本,但是是否可以只显示所有不同版本的“Adobe Acrobat Pro”并解析出#?
另外请原谅我,我仍然对整个SQL查询事情很新。但我已经做了很多挖掘,似乎找不到任何对我有用的东西。
提前致谢
斯科特
SELECT DISTINCT
v_GS_ADD_REMOVE_PROGRAMS_5.DisplayName0 AS [Display Name], LEFT(v_GS_ADD_REMOVE_PROGRAMS_5.Version0, 1) AS Version,
v_GS_ADD_REMOVE_PROGRAMS_5.Publisher0 AS Publisher, v_R_System_5.User_Name0 AS [User Name],
v_R_System_5.Name0 AS [Computer Name], DATEDIFF(day, v_GS_WORKSTATION_STATUS_5.LastHWScan, GETDATE()) AS [Last Scan]
FROM v_GS_ADD_REMOVE_PROGRAMS AS v_GS_ADD_REMOVE_PROGRAMS_5 INNER JOIN
v_R_System AS v_R_System_5 ON v_GS_ADD_REMOVE_PROGRAMS_5.ResourceID = v_R_System_5.ResourceID INNER JOIN
v_R_System_Valid AS v_R_System_Valid_5 ON v_R_System_5.ResourceID = v_R_System_Valid_5.ResourceID INNER JOIN
v_GS_WORKSTATION_STATUS AS v_GS_WORKSTATION_STATUS_5 ON
v_R_System_5.ResourceID = v_GS_WORKSTATION_STATUS_5.ResourceID
WHERE (v_GS_ADD_REMOVE_PROGRAMS_5.Publisher0 LIKE '%Adobe%') AND (v_GS_ADD_REMOVE_PROGRAMS_5.Version0 LIKE '7%') AND
(v_GS_ADD_REMOVE_PROGRAMS_5.DisplayName0 LIKE '%Acrobat%Pro%') AND
(NOT (v_GS_ADD_REMOVE_PROGRAMS_5.DisplayName0 LIKE '%Distiller%'))
答案 0 :(得分:0)
您可以使用SQL执行此操作 - 取决于您的方言和权限,可能通过编写用户定义的函数或通过其他语言(例如,通过C#/ VB.NET在SQL Server上的CLR程序集)。我不确定你的用例是什么,但在我的一些SQL字符串操作案例中,用编译(或JIT编译)语言编写它在很大程度上提高了性能 - 然而它因逐个案例,并且更容易开始使用仅限SQL的解决方案:
这是我在SQL Server 2008R2中汇总的快速版本(虽然它应该在2005年运行):
create function dbo.fFuncName ( @in varchar(128) )
returns varchar(128)
as begin
declare @out varchar(128)
declare @i int
declare @c char
declare @len int
declare @lastWasSpace bit
set @out = ''
set @i = 1
set @len = len(@in)
set @lastWasSpace = 1
while @i <= @len begin
set @c = substring(@in, @i, 1)
set @i = @i + 1
if @c >= '0' and @c <= '9' or @c = '.' continue
if @c = ' ' and @lastWasSpace = 1 continue
set @lastWasSpace = 0
if @c = ' ' set @lastWasSpace = 1
set @out = @out + @c
end
return rtrim(@out)
end
这将删除所有数字,句点和重复空格。你可以这样称呼它:
select dbo.fFuncName('Adobe Acrobat 9.0 Pro')
结果为Adobe Acrobat Pro
。
如果您需要提取版本号,您可以编写一个相反的函数 - 只保留数字和句点。
此外,由于您使用的是SQL Server 2005,因此您可以使用CLR程序集。如果您定期处理数千条记录,这真的是值得的。如果适用,请参阅here。
请注意,如果您没有足够的权限,这两种解决方案都无法运行 - 如果您所在的公司足够大,可以以策略驱动的方式分离其报表编写者和DBA,则可能无法创建用户定义的函数,在这种情况下,如果没有DBA的帮助,你的问题会变得更加复杂。