SQL字符串函数【转载】

本文围绕SQL相关问题展开,先解答了将类似'40101001'格式的code转换为'401-01-001'的SQL语句及含义。随后整理了完整的SQL字符串函数,包括字符转换、去空格、取子串等函数,还介绍了数据类型转换函数和日期函数,方便学习与查询。
部署运行你感兴趣的模型镜像
今天一同学在群里问我一个问题。

问:
请教一个SQL 2000 SEVER问题:
select * from itemcode
where code like '40%'
如何让code=40101001
变成code=401-01-001
目前有666个CODE是类似40101001
用什么语句能把它变成401-01-001

答:
update itemcode set code=replace(code,left(code,8),left(code,3)+'-'+substring(code,4,2)+'-'+substring(code,6,3)) where code like '40%'

问:
replace(code,left(code,8),left(code,3)+'-'+substring(code,4,2)+'-'+substring(code,6,3))是什么意思?

答:
拿 code=123456789 做例子
a = left(code,8) = 12345678
b = left(code,3) = 123
c = substring(code,4,2) = 45
d = substring(code,6,3) = 678
e = b+'-'+c+'-'+e = 123-45-678
f = replace(code,a,e) = 123-45-6789
配合下边的来看,应该能明白了
1、left(code,8) 取前8位
2、substring(code,4,2) 从第4位开始取2位
3、+ 是字符串连接符
4、replace(a,str1,str2) 将a中的str1替换为str2

几问几答下来,我就想着要整理一份完整的SQL字符串函数出来,借以学习和方便以后查询。

SQL字符串函数

字符串函数对二进制数据、字符串和表达式执行不同的运算。此类函数作用于CHAR、VARCHAR、 BINARY、 和VARBINARY 数据类型以及可以隐式转换为CHAR 或VARCHAR的数据类型。可以在SELECT 语句的SELECT 和WHERE 子句以及表达式中使用字符串函数。常用的字符串函数有:

一、字符转换函数
1、ASCII()
返回字符表达式最左端字符的ASCII 码值。在ASCII()函数中,纯数字的字符串可不用‘’括起来,但含其它字符的字符串必须用‘’括起来使用,否则会出错。

uploads/200508/22_134815_db_strfunc1.jpg


2、CHAR()
将ASCII 码转换为字符。如果没有输入0 ~ 255 之间的ASCII 码值,CHAR() 返回NULL 。

uploads/200508/22_135234_db_strfunc2.jpg


3、LOWER()和UPPER()
LOWER()将字符串全部转为小写;UPPER()将字符串全部转为大写。

uploads/200508/22_135839_db_strfunc3.jpg


4、STR()
把数值型数据转换为字符型数据。
STR (<float_expression>[,length[, <decimal>]])
length 指定返回的字符串的长度,decimal 指定返回的小数位数。如果没有指定长度,缺省的length 值为10, decimal 缺省值为0。
当length 或者decimal 为负值时,返回NULL;
当length 小于小数点左边(包括符号位)的位数时,返回length 个*;
先服从length ,再取decimal ;
当返回的字符串位数小于length ,左边补足空格。

uploads/200508/22_142907_db_strfunc4.jpg


二、去空格函数
1、LTRIM() 把字符串头部的空格去掉。

2、RTRIM() 把字符串尾部的空格去掉。

三、取子串函数
1、left()
LEFT (<character_expression>, <integer_expression>)
返回character_expression 左起 integer_expression 个字符。

2、RIGHT()
RIGHT (<character_expression>, <integer_expression>)
返回character_expression 右起 integer_expression 个字符。

3、SUBSTRING()
SUBSTRING (<expression>, <starting_ position>, length)
返回从字符串左边第starting_ position 个字符起length个字符的部分。

四、字符串比较函数
1、CHARINDEX()
返回字符串中某个指定的子串出现的开始位置。
CHARINDEX (<’substring_expression’>, <expression>)
其中substring _expression 是所要查找的字符表达式,expression 可为字符串也可为列名表达式。如果没有发现子串,则返回0 值。
此函数不能用于TEXT 和IMAGE 数据类型。

uploads/200508/22_144853_db_strfunc5.gif


2、PATINDEX()
返回字符串中某个指定的子串出现的开始位置。
PATINDEX (<’%substring _expression%’>, <column_ name>)其中子串表达式前后必须有百分号“%”否则返回值为0。
与CHARINDEX 函数不同的是,PATINDEX函数的子串中可以使用通配符,且此函数可用于CHAR、 VARCHAR 和TEXT 数据类型。

五、字符串操作函数
1、QUOTENAME()
返回被特定字符括起来的字符串。
QUOTENAME (<’character_expression’>[, quote_ character]) 其中quote_ character 标明括字符串所用的字符,缺省值为“[]”。

uploads/200508/22_145542_db_strfunc6.gif


2、REPLICATE()
返回一个重复character_expression 指定次数的字符串。
REPLICATE (character_expression integer_expression) 如果integer_expression 值为负值,则返回NULL 。

3、REVERSE()
将指定的字符串的字符排列顺序颠倒。
REVERSE (<character_expression>) 其中character_expression 可以是字符串、常数或一个列的值。

4、REPLACE()
返回被替换了指定子串的字符串。
REPLACE (<string_expression1>, <string_expression2>, <string_expression3>) 用string_expression3 替换在string_expression1 中的子串string_expression2。

4、SPACE()
返回一个有指定长度的空白字符串。
SPACE (<integer_expression>) 如果integer_expression 值为负值,则返回NULL 。

5、STUFF()
用另一子串替换字符串指定位置、长度的子串。
STUFF (<character_expression1>, <start_ position>, <length>,<character_expression2>)
如果起始位置为负或长度值为负,或者起始位置大于character_expression1 的长度,则返回NULL 值。
如果length 长度大于character_expression1 中 start_ position 以右的长度,则character_expression1 只保留首字符。

uploads/200508/22_150938_db_strfunc7.gif


六、数据类型转换函数
1、CAST()
CAST (<expression> AS <data_ type>[ length ])

2、CONVERT()
CONVERT (<data_ type>[ length ], <expression> [, style])

1)data_type为SQL Server系统定义的数据类型,用户自定义的数据类型不能在此使用。
2)length用于指定数据的长度,缺省值为30。
3)把CHAR或VARCHAR类型转换为诸如INT或SAMLLINT这样的INTEGER类型、结果必须是带正号或负号的数值。
4)TEXT类型到CHAR或VARCHAR类型转换最多为8000个字符,即CHAR或VARCHAR数据类型是最大长度。
5)IMAGE类型存储的数据转换到BINARY或VARBINARY类型,最多为8000个字符。
6)把整数值转换为MONEY或SMALLMONEY类型,按定义的国家的货币单位来处理,如人民币、美元、英镑等。
7)BIT类型的转换把非零值转换为1,并仍以BIT类型存储。
8)试图转换到不同长度的数据类型,会截短转换值并在转换值后显示“+”,以标识发生了这种截断。
9)用CONVERT() 函数的style 选项能以不同的格式显示日期和时间。style 是将DATATIME 和SMALLDATETIME 数据转换为字符串时所选用的由SQL Server 系统提供的转换样式编号,不同的样式编号有不同的输出格式。

uploads/200508/24_171531_convert_type.gif


uploads/200508/24_170616_db_strfunc8.gif


七、日期函数
1、day(date_expression)
返回date_expression中的日期值

2、month(date_expression)
返回date_expression中的月份值

3、year(date_expression)
返回date_expression中的年份值

4、DATEADD()
DATEADD (<datepart>, <number>, <date>)
返回指定日期date 加上指定的额外日期间隔number 产生的新日期。参数“datepart” 取值如下:

uploads/200508/24_172028_dateadd_style.gif


5、DATEDIFF()
DATEDIFF (<datepart>, <date1>, <date2>)
返回两个指定日期在datepart 方面的不同之处,即date2 超过date1的差距值,其结果值是一个带有正负号的整数值。

6、DATENAME()
DATENAME (<datepart>, <date>)
以字符串的形式返回日期的指定部分此部分。由datepart 来指定。

7、DATEPART()
DATEPART (<datepart>, <date>)
以整数值的形式返回日期的指定部分。此部分由datepart 来指定。
DATEPART (dd, date) 等同于DAY (date)
DATEPART (mm, date) 等同于MONTH (date)
DATEPART (yy, date) 等同于YEAR (date)

8、GETDATE()
以DATETIME 的缺省格式返回系统当前的日期和时间

您可能感兴趣的与本文相关的镜像

PyTorch 2.6

PyTorch 2.6

PyTorch
Cuda

PyTorch 是一个开源的 Python 机器学习库,基于 Torch 库,底层由 C++ 实现,应用于人工智能领域,如计算机视觉和自然语言处理

<think>嗯,用户想了解如何在C#应用程序中使用配置文件存储连接字符串,并通过依赖注入获取它。具体来说,他们想用IConfiguration从appsettings.json获取SQL Server连接字符串,并通过构造函数注入到DbContext里。首先,我得回忆一下相关的步骤和组件。 首先,ASP.NET Core的配置系统默认使用appsettings.json文件,用户需要在那里添加连接字符串。然后,在Startup或者Program类中配置DbContext服务,使用AddDbContext方法,并传递连接字符串。这里可能需要使用IConfiguration来获取配置的值。 我记得在ConfigureServices方法中,通常会用Configuration.GetConnectionString来获取连接字符串。比如,引用[1]中的例子,他们用var ConnectionString = Configuration.GetConnectionString("SouthwindDatabase");然后传递给AddDbContext。这一步是正确的,但用户可能需要更详细的步骤。 然后,DbContext的子类需要在构造函数中接收DbContextOptions参数,这样依赖注入才能正确注入配置。比如,在SouthwindContext的构造函数中应该有一个接受DbContextOptions<SouthwindContext>参数的构造函数,并传递给基类构造函数。这部分用户可能需要确认他们的DbContext是否设置正确。 另外,关于依赖注入容器的替换,比如使用Autofac,如引用[2]提到的,需要替换容器工厂,但用户的问题可能不需要这个,除非他们有特殊需求。不过用户的问题中没有提到Autofac,所以可能不需要涉及这部分内容,但可能需要确认是否需要额外的配置。 还有,包版本的问题,引用[3]提到使用8.x版本的Entity Framework Core包,用户需要确保他们的项目引用了正确的NuGet包,比如Microsoft.EntityFrameworkCore.SqlServer,版本要匹配。 可能的步骤总结: 1. 在appsettings.json中添加连接字符串。 2. 在Program.cs或Startup.cs中配置DbContext服务,使用IConfiguration获取连接字符串。 3. 确保DbContext的构造函数正确接收DbContextOptions。 4. 在控制器或其他服务中通过构造函数注入DbContext。 需要检查用户是否遗漏了任何步骤,比如是否调用了AddDbContext的正确重载,或者是否在DbContext中正确设置构造函数。此外,确保项目文件引用了必要的NuGet包,如Microsoft.EntityFrameworkCore.SqlServer。 用户的问题还可能涉及到环境变量或不同环境的配置,比如appsettings.Development.json,但问题中没有提到,可能需要简单提及。同时,连接字符串的名称是否与GetConnectionString的参数匹配,这也是常见的错误点。 最后,用户可能需要一个示例代码来展示整个过程,包括配置文件、服务注册和DbContext的构造函数。这有助于他们对照自己的代码进行检查。</think>在C#应用程序中通过`IConfiguration`获取连接字符串并注入`DbContext`的实现步骤如下: --- ### 1. 配置连接字符串 在`appsettings.json`中添加SQL Server连接字符串: ```json { "ConnectionStrings": { "YourDatabase": "Server=.;Database=YourDB;User Id=sa;Password=123;TrustServerCertificate=True;" } } ``` --- ### 2. 注册DbContext服务 在`Program.cs`中配置依赖注入(.NET 6+): ```csharp var builder = WebApplication.CreateBuilder(args); // 从配置文件中获取连接字符串 var connectionString = builder.Configuration.GetConnectionString("YourDatabase"); // 注册DbContext到依赖注入容器 builder.Services.AddDbContext<YourDbContext>(options => options.UseSqlServer(connectionString) ); ``` --- ### 3. 定义DbContext类 通过构造函数注入`DbContextOptions`: ```csharp public class YourDbContext : DbContext { public YourDbContext(DbContextOptions<YourDbContext> options) : base(options) { } // 添加DbSet<T>属性 public DbSet<User> Users { get; set; } } ``` --- ### 4. 在其他服务或控制器中使用 通过构造函数自动注入`YourDbContext`: ```csharp public class UserController : Controller { private readonly YourDbContext _context; public UserController(YourDbContext context) { _context = context; // 依赖注入自动传递已配置的DbContext实例 } public IActionResult Index() { var users = _context.Users.ToList(); return View(users); } } ``` --- ### 关键点说明 - **配置读取**:`builder.Configuration`默认会加载`appsettings.json`和环境变量,优先读取当前环境的配置文件(如`appsettings.Development.json`)[^1]。 - **依赖注入**:`AddDbContext`会将`DbContext`的生命周期默认设置为`Scoped`,确保每个请求使用独立的数据库连接[^2]。 - **包依赖**:需通过NuGet安装`Microsoft.EntityFrameworkCore.SqlServer`(与.NET版本匹配,如8.x)[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值