请教,c#或SQL截取字符

xiehuangda 2012-09-22 06:50:57
请教,c#或SQL截取字符

表中,信息
包含了名字和身份证,有什么方法,把名字,身份证,分别给截取出来。
再在身份证中截取生日。

表的,格式是字符串型的。

信息表
真实姓名=张三,证件号=110106198610230598
真实姓名=李四
真实姓名=赵明,证件号=110106198610230197
真实姓名=赵明,证件号=110106198610237435
,证件号=110106198610237436


有一些姓名是空的
有一些证件号是空的,请问怎么样截取呢?
怎么样才能正确,截取到姓名,身份证,身份证里再截取生日

请教大家
...全文
212 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
monkeyHere 2012-09-24
  • 打赏
  • 举报
回复
select left(FIELD, 3) from TABLE
输出这个表中所有数据FIELD列的前三个字符
同理right
如果要截中间的, 需要用到charindex获取位置
  • 打赏
  • 举报
回复
这表设计的太坑爹了
  • 打赏
  • 举报
回复
.Substring(5,5)
  • 打赏
  • 举报
回复
只在一句sql写太麻烦了,可以写一个函数什么的简化下,我写了个取姓名和身份证号的例子

select xingming=(
case when charindex('真实姓名=',字段名称)>0 then
case when charindex(',',字段名称)>0 then substring(字段名称,charindex('真实姓名=',字段名称)+5,charindex(',',字段名称)-6) else substring(字段名称,charindex('真实姓名=',字段名称)+5,len(字段名称)-5) end
end
),idCardNo=(case when charindex('证件号=',字段名称)>0 then substring(字段名称,charindex('证件号=',字段名称)+4,len(字段名称)-charindex('证件号=',字段名称)-3) end)

“字段名称”替换成你表里字段的名称就行。不嫌麻烦你可以在上面的sql里面在case when 。。then ..end 这样获取下birthday
xiehuangda 2012-09-22
  • 打赏
  • 举报
回复
感谢s1ihome
如果使用SQL取呢?
SQL语句怎么写呢?
  • 打赏
  • 举报
回复
c#写的话
string t=",证件号=110106198610237435";
string realName=string.Empty;
string idNo = string.Empty;
string birthDay=string.Empty;

if(t.IndexOf("真实姓名=")>-1)
realName = t.Substring(5,t.IndexOf(",")>5?t.IndexOf(",")-5:t.Length-5);
if(t.IndexOf(",证件号=")>-1)
idNo = t.Substring(t.IndexOf(",证件号=")+5);

if(idNo.Length==15)
{
birthDay = idNo.Substring(6,6);
}
else if (idNo.Length==18)
{
birthDay = idNo.Substring(6,8);
}
xiehuangda 2012-09-22
  • 打赏
  • 举报
回复
写个代码,谢谢
joyhen 2012-09-22
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

这个表是别人设计好的。确实是比较笨。姓名身份证都混在一个列里。
我现在,需要把他读出来显示到对应的文本框里。
如果SQL输出到时候比较难。
有什么好方法让他输出显示到textbox里呢。
textbox1显示姓名
textbox2显示身份证
textbox3显示生日。

请教大家,写一个详细代码,谢谢。
[/Quote]
程序写很简单的,你的“真实姓名,证件号”是个固定的判断标准,一个大的空判断,里面套2个if就可以了
xiehuangda 2012-09-22
  • 打赏
  • 举报
回复
这个表是别人设计好的。确实是比较笨。姓名身份证都混在一个列里。
我现在,需要把他读出来显示到对应的文本框里。
如果SQL输出到时候比较难。
有什么好方法让他输出显示到textbox里呢。
textbox1显示姓名
textbox2显示身份证
textbox3显示生日。

请教大家,写一个详细代码,谢谢。
joyhen 2012-09-22
  • 打赏
  • 举报
回复
完整的信息和空(自己加isnull判断吧)信息好处理,不全的信息得另想办法。个人建议在程序里面处理,因为判断较多。还有,你这表设计的不对,为何不这样记录
真实姓名,张三,证件号,130503670401001
真实姓名,$,证件号,$,即使不全我们也用字符代替,你要考虑后期对这部分数据的利用,加入业务上要求筛选出同一生日、月份、星座,姓氏...
declare @str nvarchar(50), @id nvarchar(18)
set @str = replace(replace('真实姓名=张三,证件号=130503670401001','=','.'),',','.')
set @id=parsename(@str,1)
select PARSENAME(@str,3), case len(@id) when 15 then substring(@id,7,6) when 18 then substring(@id,7,8) end
xiehuangda 2012-09-22
  • 打赏
  • 举报
回复
请写一个代码。谢谢
王子文龙 2012-09-22
  • 打赏
  • 举报
回复
首先判断长度,可以判断出是姓名为空或证件号为空,之后分隔一下按照常规截取就好了
xiehuangda 2012-09-22
  • 打赏
  • 举报
回复
能举个SQL例吗?
谢谢

帮忙写个完整点的SQL语句.
  • 打赏
  • 举报
回复
sql里面有if else,case when , left,right这些函数什么的,你可以对应着修改一下就行。

110,560

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧