如何在 SQL Server 2008 R2 中的 select 语句中编写条件

Posted

技术标签:

【中文标题】如何在 SQL Server 2008 R2 中的 select 语句中编写条件【英文标题】:How to write a condition inside select statement in SQL Server 2008 R2 【发布时间】:2014-12-24 08:15:43 【问题描述】:

我的场景是我有下表 -

FullName                 ManufacturingCost
------------------------------------------
Harry Singh Malhotra          $200.00
Harry                         $200.00
Danny                         $200.00
Britany Krout                 $100.00

现在我想要上表中的两列 - fullNameFirstName。我正在使用这个查询:

Select 
    fullName, left(fullName, charindex(' ', fullName, 1) - 1) as firstName
from 
    Table1

上述查询的问题是,在第二行和第三行,Firstname 返回为Null,因为charindex 在这些行中找不到' '

我想要的结果是:

    FullName                 FirstName
    -------------------------------------
    Harry Singh Malhotra     Harry
    Harry                    Harry
    Danny                    Danny
    Britany Krout            Britany

谁能帮我告诉我如何在语句中添加条件

select * from Table11

因为我想检查特定列中每个值的条件。

Select case 不起作用,因为它只接受标量值。

【问题讨论】:

REAL 解决方案是将这些内容(FirstNameLastName)存储为 单独的列 - 将它们一起添加到 @ 987654333@ 比将全名解析为名字和姓氏要简单得多..... 【参考方案1】:

使用Case Statement 处理FullName 而不使用MiddlenameLastName

SELECT fullName,
       First_Name=LEFT(( fullName ), CASE
                                       WHEN Charindex(' ', fullName) = 0 THEN Len(fullName)
                                       ELSE Charindex(' ', fullName)
                                     END)
FROM   Table1 

ParseName 技巧也可以,但您的字符串最多应包含 4 个单词。

SELECT fullName,
       First_Name=Reverse(Parsename(Replace(Reverse(fullName), ' ', '.'), 1))
FROM   table1 

【讨论】:

@sam - Gald 它帮助检查了解析名称的答案

以上是关于如何在 SQL Server 2008 R2 中的 select 语句中编写条件的主要内容,如果未能解决你的问题,请参考以下文章

如何删除 SQL Server 2008 R2 数据库中的最后 N 条记录? [复制]

如何使用 JDBC 将表值参数(类数组参数)传递给 Microsoft SQL Server 2008 R2 中的存储过程? [复制]

如何安装sql server 2008 r2

如何在 SQL Server 2014 中从 SQL Server 2008 R2 恢复备份?

如何在windows server2008 r2上打开internet信息服务 iis 管理器

SQL Server 2008 中的 SQL Server 2008 R2 中的 dm_os_volume_stats 等效项是啥?