有一张表,其中的一列包含我需要用于报告的所有信息。 我想将该列的某些部分作为该报告的一列,但是问题是该列的结果来自3种不同的字符长度。
示例:
vc = await channel.connect()
vc.play(discord.FFmpegPCMAudio(executable="C:/path/ffmpeg.exe", source="mp3.mp3"))
在此特定示例中,我希望中间部分(例如ABC)是称为“初始”的列,问题是我对每个LEN使用CASE逻辑。不确定如何实现此目标。
下面我的示例查询。它提取所有可能的选项,但作为单独的列。我要怎么做才能将这3个选项拉入一列,我们称之为“初始”?
谢谢
Row1: 20180101_ABC_12
Row2: 20180102_DEFG_23
Row3: 20180103_HIJKL_45
答案 0 :(得分:2)
在Tableau中,您将使用计算所得的字段来完成此操作。
首字母缩写:
CASE LEN(FileName)
WHEN 10 THEN SUBSTRING(FileName, 10, 3)
WHEN 11 THEN SUBSTRING(FileName, 10, 4)
WHEN 12 THEN SUBSTRING(FileName, 10, 5)
END
或者也许
SUBSTRING(FileName
,10
,CASE LEN(FileName)
WHEN 10 THEN 3
WHEN 11 THEN 4
WHEN 12 THEN 5
END
)
但是,如果不考虑更多技术方面的问题,则可以通过数学来解决(假设您的数据限于10、11和12,或者该模式适用):
SUBSTRING(FileName
,10
,LEN(FileName)-7
)
答案 1 :(得分:1)
您需要1条CASE
语句来涵盖所有可能的情况,而不是3个单独的情况,因为每个情况都会创建一个新列:
SELECT
FileName
, CASE LEN(FileName)
WHEN 10 THEN SUBSTRING(FileName, 10, 3)
WHEN 11 THEN SUBSTRING(FileName, 10, 4)
WHEN 12 THEN SUBSTRING(FileName, 10, 5)
ELSE NULL
END AS Initials
FROM File
获取介于2 _
之间的所有内容的另一种方法:
SELECT
FileName
, substring(
left(FileName, len(FileName) - charindex('_', reverse(FileName) + '_')),
charindex('_', FileName) + 1,
len(FileName)
) AS Initials
FROM File
但是根据您的逻辑,我假设列FileName
中的值具有相同的样式:
<9 digits>_<Initials>_<2 digits>
如果是这种情况,那么您可以得到想要的东西:
SELECT
FileName
, substring(FileName, 10, len(FileName) - 12) AS Initials
FROM File