• 笔记0408


     

    1. string.indexof()

    IndexOf()与LastIndexOf()的不同在于IndexOf()从字符串中第一个字符开始检索,LastIndexOf()是从字符串的最后一个字符向前检索。
    返回值都是字符串中字符所在的下标,如果没有找到则返回-1

    2.string.replace()

    返回一个新字符串,其中当前实例中出现的所有指定字符串都替换为另一个指定的字符串。
    定义:

    public string Replace(

        string oldValue,

        string newValue

    )

    实例:

    using System;

     

    public class ReplaceTest {

        public static void Main() {

     

            string errString = "This docment uses 3 other docments to docment the docmentation";

     

            Console.WriteLine("The original string is:{0}'{1}'{0}", Environment.NewLine, errString);

     

            // Correct the spelling of "document".

     

            string correctString = errString.Replace("docment", "document");

     

            Console.WriteLine("After correcting the string, the result is:{0}'{1}'",

                    Environment.NewLine, correctString);

        }

    }

    //

    // This code example produces the following output:

    //

    // The original string is:

    // 'This docment uses 3 other docments to docment the docmentation'

    //

    // After correcting the string, the result is:

    // 'This document uses 3 other documents to document the documentation'

    //

    3. string.split()

    第一种方法:
    string s=abcdeabcdeabcde;
    string[] sArray=s.Split(c) ;
    foreach(string i in sArray)
      Console.WriteLine(i.ToString());
    输出下面的结果:
    ab
    deab
    deab
    de
    第二种方法:
    我们看到了结果是以一个指定的字符进行的分割。使用另一种构造方法对多个字符进行分割: 
    string s=abcdeabcdeabcde
    string[] sArray1=s.Split(new char[3]{c,d,e}) ;
    foreach(string i in sArray1)
      Console.WriteLine(i.ToString());
    可以输出下面的结果:
    ab
    ab
    ab
    第三种方法:
    除了以上的这两种方法以外,第三种方法是使用正则表达式。新建一个控制台项目。然后先添加 using System.Text.RegularExpressions;
    System.Text.RegularExpressions
    string content=agcsmallmacsmallgggsmallytx; 
    string[]resultString=Regex.Split(content,small,RegexOptions.IgnoreCase) 
    foreach(string i in resultString)
      Console.WriteLine(i.ToString());
    输出下面的结果:
    agc
    mac
    ggg
    ytx
    第四种方法:
    string str1=我*****是*****一*****个*****教*****师;
    string[] str2;
    str1=str1.Replace(*****,*) ;
    str2=str1.Split(*) ;
    foreach(string i in str2)
      Console.WriteLine(i.ToString()); 
    第五种方法:
    string str1=我**是*****一*****个*****教*****师;
    我希望显示的结果为:我是一个教师。
    我如果采用上面的第四种方法来做就会产生下面的错误:我   是一个教师。中间有空格输出,所以输出结果并不是希望的结果,这就又回到了正则表达式了,这时可以采用下面的第五种方法:
    string str1=我**是*****一*****个*****教*****师;
    string[] str2 = System.Text.RegularExpressions.Regex.Split(str1,@[*]+); 
    foreach(string i in str2)
      Console.WriteLine(i.ToString()); 
    这里通过[*]+ 巧妙的完成了我们的目标。

    4. sql server :CAST()

    在 SQL Server  中将表达式由一种数据类型转换为另一种数据类型。

    DECLARE @myval decimal (5, 2);

    SET @myval = 193.57;

    SELECT CAST(CAST(@myval AS varbinary(20)) AS decimal(10,5));

    -- Or, using CONVERT

    SELECT CONVERT(decimal(10,5), CONVERT(varbinary(20), @myval));

    将某种数据类型的表达式显式转换为另一种数据类型。CAST 和 CONVERT 提供相似的功能。

    语法
    使用 CAST:

    CAST ( expression AS data_type )

    使用 CONVERT:

    CONVERT (data_type[(length)], expression [, style])

    参数
    expression

    是任何有效的 Microsoft® SQL Server™ 表达式。有关更多信息,请参见表达式。

    data_type

    目标系统所提供的数据类型,包括 bigint 和 sql_variant。不能使用用户定义的数据类型。有关可用的数据类型的更多信息,请参见数据类型。

    length

    nchar、nvarchar、char、varchar、binary 或 varbinary 数据类型的可选参数。

    style

    日期格式样式,借以将 datetime 或 smalldatetime 数据转换为字符数据(nchar、nvarchar、char、varchar、nchar 或 nvarchar 数据类型);或者字符串格式样式,借以将 float、real、money 或 smallmoney 数据转换为字符数据(nchar、nvarchar、char、varchar、nchar 或 nvarchar 数据类型)。

    SQL Server 支持使用科威特算法的阿拉伯样式中的数据格式。

    在表中,左侧的两列表示将 datetime 或 smalldatetime 转换为字符数据的 style 值。给 style 值加 100,可获得包括世纪数位的四位年份 (yyyy)。

    不带世纪数位 (yy) 带世纪数位 (yyyy) 
    标准 
    输入/输出** 
    - 0 或 100 (*)  默认值 mon dd yyyy hh:miAM(或 PM) 
    1 101 美国 mm/dd/yyyy 
    2 102 ANSI yy.mm.dd 
    3 103 英国/法国 dd/mm/yy 
    4 104 德国 dd.mm.yy 
    5 105 意大利 dd-mm-yy 
    6 106 - dd mon yy 
    7 107 - mon dd, yy 
    8 108 - hh:mm:ss 
    - 9 或 109 (*)  默认值 + 毫秒 mon dd yyyy hh:mi:ss:mmmAM(或 PM) 
    10 110 美国 mm-dd-yy 
    11 111 日本 yy/mm/dd 
    12 112 ISO yymmdd 
    - 13 或 113 (*)  欧洲默认值 + 毫秒 dd mon yyyy hh:mm:ss:mmm(24h) 
    14 114 - hh:mi:ss:mmm(24h) 
    - 20 或 120 (*)  ODBC 规范 yyyy-mm-dd hh:mm:ss[.fff] 
    - 21 或 121 (*)  ODBC 规范(带毫秒) yyyy-mm-dd hh:mm:ss[.fff] 
    - 126(***) ISO8601 yyyy-mm-dd Thh:mm:ss:mmm(不含空格) 
    - 130* 科威特 dd mon yyyy hh:mi:ss:mmmAM 
    - 131* 科威特

      默认值(style 0 或 100、9 或 109、13 或 113、20 或 120、21 或 121)始终返回世纪数位 (yyyy)。
    ** 当转换为 datetime 时输入;当转换为字符数据时输出。
    *** 专门用于 XML。对于从 datetime 或 smalldatetime 到 character 数据的转换,输出格式如表中所示。对于从 float、money 或 smallmoney 到 character 数据的转换,输出等同于 style 2。对于从 real 到 character 数据的转换,输出等同于 style 1。

     

    重要  默认情况下,SQL Server 根据截止年份 2049 解释两位数字的年份。即,两位数字的年份 49 被解释为 2049,而两位数字的年份 50 被解释为 1950。许多客户端应用程序(例如那些基于 OLE 自动化对象的客户端应用程序)都使用 2030 作为截止年份。SQL Server 提供一个配置选项("两位数字的截止年份"),借以更改 SQL Server 所使用的截止年份并对日期进行一致性处理。然而最安全的办法是指定四位数字年份。

     

    当从 smalldatetime 转换为字符数据时,包含秒或毫秒的样式将在这些位置上显示零。当从 datetime 或 smalldatetime 值进行转换时,可以通过使用适当的 char 或 varchar 数据类型长度来截断不需要的日期部分。

    下表显示了从 float 或 real 转换为字符数据时的 style 值。

    值 输出 
    0(默认值) 最大为 6 位数。根据需要使用科学记数法。 
    1 始终为 8 位值。始终使用科学记数法。 
    2 始终为 16 位值。始终使用科学记数法。


    在下表中,左列表示从 money 或 smallmoney 转换为字符数据时的 style 值。

    值 输出 
    0(默认值) 小数点左侧每三位数字之间不以逗号分隔,小数点右侧取两位数,例如 4235.98。 
    1 小数点左侧每三位数字之间以逗号分隔,小数点右侧取两位数,例如 3,510.92。 
    2 小数点左侧每三位数字之间不以逗号分隔,小数点右侧取四位数,例如 4235.9819。 


    返回类型
    返回与 data type 0 相同的值。

    注释
    隐性转换指那些没有指定 CAST 或 CONVERT 函数的转换。而显式转换指那些已指定了所需 CAST (CONVERT) 函数的转换。下面的图表显示了所有可用于 SQL Server 系统提供的数据类型的显式和隐性转换,这些数据类型包括 bigint 和 sql_variant。

     

     

    说明  因为 Unicode 数据始终使用偶数位字节,所以当在 binary 或 varbinary 数据类型与 Unicode 所支持的数据类型之间进行转换时会使用提示。例如,此转换不返回 41 的十六进制值,而是返回 4100 的十六进制值:SELECT CAST(CAST(0x41 AS nvarchar) AS varbinary)

     

    不支持 text 和 image 数据类型的自动数据类型转换。可以将 text 数据显式转换为字符数据,将 image 数据显性转换为 binary 或 varbinary 数据,但是最大长度为 8000。如果尝试进行不正确的转换(例如,将包含字母的字符表达式转换为 int),则 SQL Server 会产生错误信息。

    当 CAST 或 CONVERT 的输出是字符串并且输入也是字符串时,输出与输入具有相同的排序规则和排序规则标签。如果输入不是字符串,则输出采用数据库的默认排序规则及强制默认的排序规则标签。有关更多信息,请参见排序规则的优先顺序。

    若要给输出指派不同的排序规则,请将 COLLATE 子句应用到 CAST 或 CONVERT 函数的结果表达式中。例如:

    SELECT CAST(''abc'' AS varchar(5)) COLLATE French_CS_AS
    不存在有关赋值的从 sql_variant 数据类型进行的隐性转换,但是存在转换为 sql_variant 的隐性转换。

    将字符或二进制表达式(char、nchar、nvarchar、varchar、binary 或 varbinary)转换为不同数据类型的表达式时,数据可能会被截断,只显示一部分,或者因为结果太短无法显示而返回错误。除下表中所显示的转换外,转换为 char、varchar、nchar、nvarchar、binary 和 varbinary 时将被截断。

     varchar * 
      nchar E 
      nvarchar E 
    money、smallmoney、numeric、decimal、float 或 real char E 
      varchar E 
      nchar E 
      nvarchar E

     

    * 结果长度太短而无法显示。
    E 因为结果长度太短无法显示而返回错误。

    Microsoft SQL Server 仅保证往返转换(即,从原始数据类型进行转换后又返回原始数据类型)在各版本间产生相同值。下面的示例显示往返转换:

    DECLARE @myval decimal (5, 2)SET @myval = 193.57SELECT CAST(CAST(@myval AS varbinary(20)) AS decimal(10,5))-- Or, using CONVERTSELECT CONVERT(decimal(10,5), CONVERT(varbinary(20), @myval))
    例如,不要尝试构造 binary 值并将它们转换为数字数据类型分类的数据类型。SQL Server 并不保证 decimal 或 numeric 数据类型转换为 binary 的结果在 SQL Server 各版本间相同。

    下面的示例显示了由于太短而无法显示的结果表达式。

    USE pubsSELECT SUBSTRING(title, 1, 25) AS Title, CAST(ytd_sales AS char(2))FROM titlesWHERE type = ''trad_cook''
    下面是结果集:

    Title                        ------------------------- -- Onions, Leeks, and Garlic *  Fifty Years in Buckingham *  Sushi, Anyone?            *  (3 row(s) affected)
    当具有不同小数位数的数据类型进行转换时,值将被截断为最精确的数位。例如,SELECT CAST(10.6496 AS int) 的结果为 10。

    转换时,若目标数据类型的小数位数小于源数据类型的小数位数,则要转换的值将被四舍五入。例如,CAST(10.3496847 AS money) 的结果是 $10.3497。

    当将非数字类型的 char、nchar、varchar 或 nvarchar 数据转换为 int、float、numeric 或 decimal 时,SQL Server 将返回错误信息。当将空字符串 (" ") 转换为 numeric 或 decimal 时,SQL Server 也将返回错误信息。

    使用二进制字符串数据
    当 binary 或 varbinary 数据转换为字符数据并且在 x 后面指定了奇数位的值时,SQL Server 在 x 后面添加 0(零)以成为偶数位值。

    二进制数据包含从 0 到 9 和从 A 到 F(或从 a 到 f)的字符,每两个字符为一组。二进制字符串必须以 0x 开头。例如,若要输入 FF,请键入 0xFF。最大值是一个 8000 字节的二进制值,每个字节的最大值都是 FF。Binary 数据类型不能用于十六进制数据,而是用于位模式。对于存储为二进制数据的十六进制数字的转换和计算结果,无法保证其准确性。

    当指定 binary 数据类型的长度时,每两个字符被算作是一个单位长度。长度 10 表示将输入 10 个双字符组。

    由 0x 表示的空二进制字符串可以储存为二进制数据。

    示例
    A. 同时使用 CAST 和 CONVERT
    每个示例都将检索书名(这些图书的截止当前销售额的第一位数字为 3),并将这些图书的 ytd_sales 转换为 char(20)。

    -- Use CAST.USE pubsGOSELECT SUBSTRING(title, 1, 30) AS Title, ytd_salesFROM titlesWHERE CAST(ytd_sales AS char(20)) LIKE ''3%''GO-- Use CONVERT.USE pubsGOSELECT SUBSTRING(title, 1, 30) AS Title, ytd_salesFROM titlesWHERE CONVERT(char(20), ytd_sales) LIKE ''3%''GO
    下面是任一查询的结果集:

    Title                          ytd_sales   ------------------------------ ----------- Cooking with Computers: Surrep 3876        Computer Phobic AND Non-Phobic 375         Emotional Security: A New Algo 3336        Onions, Leeks, and Garlic: Coo 375         (4 row(s) affected)
    B. 使用带有算术运算符的 CAST
    下面的示例通过将总的截止当前销售额 (ytd_sales) 与每本图书的价格 (price) 相除,进行单独列计算 (Copies)。在四舍五入到最接近的整数后,此结果将转换为 int 数据类型。

    USE pubsGOSELECT CAST(ROUND(ytd_sales/price, 0) AS int) AS ''Copies''FROM titlesGO
    下面是结果集:

    Copies      ------ 205         324         6262        205         102         7440        NULL        383         205         NULL        17          187         16          204         418         18          1263        273         (18 row(s) affected)
    C. 使用 CAST 进行串联
    下面的示例使用 CAST 数据类型转换函数来串联非字符、非二进制表达式。

    USE pubsGOSELECT ''The price is '' + CAST(price AS varchar(12))FROM titlesWHERE price > 10.00GO
    下面是结果集:

    ------------------ The price is 19.99        The price is 11.95        The price is 19.99        The price is 19.99        The price is 22.95        The price is 20.00        The price is 21.59        The price is 10.95        The price is 19.99        The price is 20.95        The price is 11.95        The price is 14.99        (12 row(s) affected)
    D. 使用 CAST 获得更多易读文本
    下面的示例在选择列表中使用 CAST 将 title 列转换为 char(50) 列,这样结果将更加易读。

    USE pubsGOSELECT CAST(title AS char(50)), ytd_salesFROM titlesWHERE type = ''trad_cook''GO
    下面是结果集:

                                                           ytd_sales--------------------------------------------------     ---------Onions, Leeks, and Garlic: Cooking Secrets of the      375Fifty Years in Buckingham Palace Kitchens              15096Sushi, Anyone?                                         4095(3 row(s) affected)
    E. 使用带有 LIKE 子句的 CAST
    下面的示例将 int 列(ytd_sales 列)转换为 char(20) 列,以便使用 LIKE 子句。

    USE pubsGOSELECT title,

    -

    ytd_salesFROM titlesWHERE CAST(ytd_sales AS char(20)) LIKE ''15%'' AND type = ''trad_cook''GO


    下面是结果集:

    title    ytd_sales   ------------------------------------------------------------

    5. SQL SERVER :FETCH

    通过 Transact-SQL 服务器游标检索特定行。

    语法:

    FETCH

              [ [ NEXT | PRIOR | FIRST | LAST

                        | ABSOLUTE { n | @nvar }

                        | RELATIVE { n | @nvar }

                   ]

                   FROM

              ]

    { { [ GLOBAL ] cursor_name } | @cursor_variable_name }

    [ INTO @variable_name [ ,...n ] ]

    示例

    A. 在简单的游标中使用 FETCH

    以下示例为 Person.Contact 表中姓氏以字母 B 开头的行声明了一个简单的游标,并使用 FETCH NEXT 逐个提取这些行。FETCH 语句以单行结果集形式返回在 DECLARE CURSOR 中指定的列的值。

    USE AdventureWorks

    GO

    DECLARE contact_cursor CURSOR FOR

    SELECT LastName FROM Person.Contact

    WHERE LastName LIKE 'B%'

    ORDER BY LastName

     

    OPEN contact_cursor

     

    -- Perform the first fetch.

    FETCH NEXT FROM contact_cursor

     

    -- Check @@FETCH_STATUS to see if there are any more rows to fetch.

    WHILE @@FETCH_STATUS = 0

    BEGIN

       -- This is executed as long as the previous fetch succeeds.

       FETCH NEXT FROM contact_cursor

    END

     

    CLOSE contact_cursor

    DEALLOCATE contact_cursor

    GO

    B. 使用 FETCH 将值存入变量

    以下示例与上面的示例相似,但 FETCH 语句的输出存储于局部变量而不是直接返回到客户端。PRINT 语句将变量组合成单一字符串并将其返回到客户端。

    USE AdventureWorks

    GO

    -- Declare the variables to store the values returned by FETCH.

    DECLARE @LastName varchar(50), @FirstName varchar(50)

     

    DECLARE contact_cursor CURSOR FOR

    SELECT LastName, FirstName FROM Person.Contact

    WHERE LastName LIKE 'B%'

    ORDER BY LastName, FirstName

     

    OPEN contact_cursor

     

    -- Perform the first fetch and store the values in variables.

    -- Note: The variables are in the same order as the columns

    -- in the SELECT statement.

     

    FETCH NEXT FROM contact_cursor

    INTO @LastName, @FirstName

     

    -- Check @@FETCH_STATUS to see if there are any more rows to fetch.

    WHILE @@FETCH_STATUS = 0

    BEGIN

     

       -- Concatenate and display the current values in the variables.

       PRINT 'Contact Name: ' + @FirstName + ' ' +  @LastName

     

       -- This is executed as long as the previous fetch succeeds.

       FETCH NEXT FROM contact_cursor

       INTO @LastName, @FirstName

    END

     

    CLOSE contact_cursor

    DEALLOCATE contact_cursor

    GO

    C. 声明 SCROLL 游标并使用其他 FETCH 选项

    以下示例创建一个 SCROLL 游标,使其通过 LAST、PRIOR、RELATIVE 和 ABSOLUTE 选项支持全部滚动功能。

    USE AdventureWorks

    GO

    -- Execute the SELECT statement alone to show the

    -- full result set that is used by the cursor.

    SELECT LastName, FirstName FROM Person.Contact

    ORDER BY LastName, FirstName

     

    -- Declare the cursor.

    DECLARE contact_cursor SCROLL CURSOR FOR

    SELECT LastName, FirstName FROM Person.Contact

    ORDER BY LastName, FirstName

     

    OPEN contact_cursor

     

    -- Fetch the last row in the cursor.

    FETCH LAST FROM contact_cursor

     

    -- Fetch the row immediately prior to the current row in the cursor.

    FETCH PRIOR FROM contact_cursor

     

    -- Fetch the second row in the cursor.

    FETCH ABSOLUTE 2 FROM contact_cursor

     

    -- Fetch the row that is three rows after the current row.

    FETCH RELATIVE 3 FROM contact_cursor

     

    -- Fetch the row that is two rows prior to the current row.

    FETCH RELATIVE -2 FROM contact_cursor

     

    CLOSE contact_cursor

    DEALLOCATE contact_cursor

    GO

    6. SQL SERVER :ISNULL 

    7. 自定义函数

     

    用户定义自定义函数像内置函数一样返回标量值,也可以将结果集用表格变量返回

    用户自定义函数的类型:

    标量函数:返回一个标量值

    表格值函数{内联表格值函数、多表格值函数}:返回行集(即返回多个值)

    1、标量函数

    Create function 函数名(参数)

    Returns 返回值数据类型

    [with {Encryption | Schemabinding }]

    [as]

    begin

    SQL语句(必须有return 变量或值)

    End

    Schemabinding :将函数绑定到它引用的对象上(注:函数一旦绑定,则不能删除、修改,除非删除绑定)

    Create function AvgResult(@scode varchar(10))

    Returns real

    As

    Begin

       Declare @avg real

       Declare @code varchar(11)

       Set @code=@scode + ‘%’

       Select @avg=avg(result) from LearnResult_baijiali

    Where scode like @code

    Return @avg

    End

    执行用户自定义函数

    select 用户名。函数名 as 字段别名

    select dbo.AvgResult(‘s0002’) as result

    用户自定义函数返回值可放到局部变量中,用set ,select,exec赋值

    declare @avg1 real ,@avg2 real ,@avg3 real

    select @avg1= dbo.AvgResult(‘s0002’)

    set @avg2= dbo.AvgResult(‘s0002’)

    exec @avg3= dbo.AvgResult ‘s0002’

    select @avg1 as avg1 ,@avg2 as avg2 ,@avg3 as avg3

    函数引用

    create function code(@scode varchar(10))

    returns varchar(10)

    as

    begin

    declare @ccode varchar(10)

    set @scode = @scode + ‘%’

    select @ccode=ccode from cmessage

       where ccode like @scode

    return @ccode

    end

    select name from class where ccode = dbo.code(‘c001’)

    2、表格值函数

    a、 内联表格值函数

    格式:

    create function 函数名(参数)

    returns table

    [with {Encryption | Schemabinding }]

    as

    return(一条SQL语句)

    create function tabcmess(@code varchar(10))

    returns table

    as

    return(select ccode,scode from cmessage where ccode like @ccode)

    b、 多句表格值函数

       create function 函数名(参数)

       returns 表格变量名table (表格变量定义)

       [with {Encryption | Schemabinding }]

    as

       begin

        SQL语句

       end

    多句表格值函数包含多条SQL语句,至少有一条在表格变量中填上数据值

    表格变量格式

    returns @变量名 table (column 定义| 约束定义 [,…])

    对表格变量中的行可执行select,insert,update,delete , 但select into 和 insert 语句的结果集是从存储过程插入。

    Create function tabcmessalot (@code varchar(10))

    Returns @ctable table(code varchar(10) null,cname varchar(100) null)

    As

    Begin

    Insert @ctable

    Select ccode,explain from cmessage

    Where scode like @code

    return

    End

    Select * from tabcmessalot(‘s0003’)

    将存储过程转变成函数 ,参阅联机帮助

     



     

  • 相关阅读:
    【Java线程】Java内存模型总结
    转:【Java并发编程】之二十三:并发新特性—信号量Semaphore(含代码)
    转:【Java并发编程】之二十二:并发新特性—障碍器CyclicBarrier(含代码)
    【知识强化】第五章 输入/输出(I/O)管理 5.2 I/O核心子系统I
    【知识强化】第四章 文件管理 4.3 磁盘组织与管理
    【知识强化】第四章 文件管理 4.1+4.2 文件系统基础和实现
    【知识强化】第三章 内存管理 3.1 内存管理概念
    【知识强化】第二章 进程管理 2.4 死锁
    【知识强化】第二章 进程管理 2.3 进程同步
    LeetCode Unique Substrings in Wraparound String
  • 原文地址:https://www.cnblogs.com/jonson1126/p/3008388.html
Copyright © 2020-2023  润新知