数据库中CAST 和 Convert 的用法

    技术2024-10-17  64

        今天一上班老大要求我改善我们网站系统的注册机制。之前我们是严格区分大小写的,所以会出现同一个登陆名的各种写法,比如说admin,Admin,aDmin,ADMIN等等。今天他要求我用户可以注册他想要的大小写字母,不过一旦某个用户名被注册了,它的其他形式一律被算为存在的。

     

        因为我之前接触数据库不多,所以想了半天没想出什好方法,最后愚蠢的决定先把全部用户的用户名查询出来赋给一个数组,再把数组值一个字母一个字母的对比。不过很快放弃了这个世纪笑话,开始摸索。就这样在微软MSDN上我看到了CAST的用法。 用CAST来取数据库中的某字段lowercase值,这方法又简单又方便,恨自己没好好学。用法很简单对于我的例子具体用法如下:

     

        $username=trim($_GET["username"]); $lUserName = strtolower($username); $conn=mysql_open(); $sql="select * from user where CAST(user_name AS char(30))='$lUserName'"; $query=mysql_query($sql); $rst=mysql_fetch_object($query); mysql_close($conn); if ($rst)echo 'true'; else echo 'false';

    在第5行取用Ajax传来用户要注册的username值,再用第6行的函数转换成小写字母的值。

    最后在SQL语句中使用CAST来去数据表中的值与之前的值对比就可以了,如果存在一样字母顺序组成的用户名就返回true,若不存在则反之。

     

     

    再举几个例子

     

    1, 每个示例都检索列表价格的第一位是 3 的产品的名称,并将 ListPrice 转换为 int

     

    -- Use CAST USE AdventureWorks2008R2; GO SELECT SUBSTRING(Name, 1, 30) AS ProductName, ListPrice FROM Production.Product WHERE CAST(ListPrice AS int) LIKE '3%'; GO -- Use CONVERT. USE AdventureWorks2008R2; GO SELECT SUBSTRING(Name, 1, 30) AS ProductName, ListPrice FROM Production.Product WHERE CONVERT(int, ListPrice) LIKE '3%'; GO

     

    以下示例将本年度截止到现在的全部销售额 (SalesYTD ) 除以佣金百分比 (CommissionPCT ),从而得出单列计算结果 (Computed )。在舍入到最接近的整数后,将此结果转换为 int 数据类型。

     

    USE AdventureWorks2008R2; GO SELECT CAST(ROUND(SalesYTD/CommissionPCT, 0) AS int) AS 'Computed' FROM Sales.SalesPerson WHERE CommissionPCT != 0; GO

    下面是结果集:

    Computed ------ 379753754 346698349 257144242 176493899 281101272 0 301872549 212623750 298948202 250784119 239246890 101664220 124511336 97688107 (14 row(s) affected)

     

    以下示例使用 CAST 连接非字符型非二进制表达式。

    USE AdventureWorks2008R2; GO SELECT 'The list price is ' + CAST(ListPrice AS varchar(12)) AS ListPrice FROM Production.Product WHERE ListPrice BETWEEN 350.00 AND 400.00; GO

    下面是结果集:

    ListPrice ------------------ The list price is 357.06 The list price is 364.09 The list price is 364.09 The list price is 364.09 The list price is 364.09 (5 row(s) affected)

     

    以下示例将 moneySalesYTD 转换为 int 列,然后再转换为 char(20) 列,以便可以将其用于 LIKE 子句。USE AdventureWorks2008R2; GO SELECT p.FirstName, p.LastName, s.SalesYTD, s.BusinessEntityID FROM Person.Person p JOIN Sales.SalesPerson s ON p.BusinessEntityID = s.BusinessEntityID WHERE CAST(CAST(s.SalesYTD AS int) AS char(20)) LIKE '2%'; GO 

    下面是结果集:

    FirstName LastName SalesYTD SalesPersonID ---------------- ------------------- ---------------- ------------- Tsvi Reiter 2811012.7151 279 Syed Abbas 219088.8836 288 Rachel Valdez 2241204.0424 289 (3 row(s) affected)

     

    最新回复(0)