Oracle SQL如何判断一个字段值的长度

Oracle SQL如何判断一个字段值的长度,第1张

判断长度一般用于字符型字段

如果是某个值的长度

select length(字段名) from 表名

如果是表中这个字段的长度

select data_length from user_tab_columns where table_name='表名' and cloumn_name='字段名'

其中后一条语句表名和字段名需要大写

你好哦:

遇到问题的时候千万别怕哦,看清错误再说:

unsupported encoding gbk for result set cloumn 这句话的意思是不支持编码为GBK的数据作为参数,也就是说db数据库是不支持这种编码格式的,那么问题来了,什么格式才是受支持的呢,当然国际比较通用的当然就是utf-8,所以说,在你的编译工具的属性设置中,将gbk编码格式改为utf-8一切都会解决。

最后祝你学业有成 ,望采纳谢谢!

思路很简单,就是先依次获取Excel中表的表名,然后再将Excel表的数据导入到内存以DataTable格式存在,最后再把dataTable数据导入到Mdb数据库文件中。最后实现的功能可以使Excel多表进行导入,如果Mdb数据库文件中已有新建的表, *** 作是先删除数据库中的已存在表,再重新创建表,导数据。

源码:

using System;using SystemCollectionsGeneric;using SystemComponentModel;using SystemData;using SystemDrawing;using SystemLinq;using SystemText;using SystemThreadingTasks;using SystemWindowsForms;using SystemDataOleDb;

namespace TestK

{

public partial class Form1 : Form    {

public Form1()

{

InitializeComponent();

}

public int tableNameNum = 0;   //记录Excel中所有表的数量        public OleDbConnection connection = new OleDbConnection("Provider=MicrosoftJetOLEDB40;Data Source=C:\\Users\\CES\\Desktop\\CESmdb");

//建立与数据库文件CESmdb的连接

//打开以xls或者xlsx结尾的文件        private void button1_Click(object sender, EventArgs e)

{

OpenFileDialog dlg = new OpenFileDialog();   //创建窗体            dlgFilter = "Excel文件 (xls;xlsx)|xls;xlsx";    //浏览过滤出以xls或者xlsx结尾的文件            if(dlgShowDialog() ==  DialogResultOK)

{

string filePath = dlgFileName;  //获取打开文件的路径                thistextBox1Text = filePath;

}

}

//获取Excel中所有表的表名        public string[] GetTableName(string excelFilename)

{

//建立与指定Excel文件的连接            string connectionString = stringFormat("Provider=MicrosoftACEOLEDB120;Data Source={0};Jet OLEDB:Engine Type=35;Extended Properties=Excel 80;Persist Security Info=False", excelFilename);

string[] tableName = new string[20]; //存储Excel中所有表的表名            string temp;  //中间变量

using (SystemDataOleDbOleDbConnection connection = new SystemDataOleDbOleDbConnection(connectionString))

{

connectionOpen();

//获取数据库架构信息,包括列、主键、表等信息                DataTable table = connectionGetOleDbSchemaTable(SystemDataOleDbOleDbSchemaGuidTables, null);

for (int i = 0; i < tableRowsCount;i++ )

{

temp = tableRows[i]["Table_Name"]ToString();  //获取Excel中的表名                    tableName[i] = tempReplace("$", "");   //因为获取的表名最后会有$符号,所以要替换                }

tableNameNum = tableRowsCount;

connectionClose();

}

return tableName;

}

//获取Excel中每张表的数据,以datatable类型返回        public DataTable GetExcelTable(string excelFilename,string tableName)

{

//建立与指定Excel文件的连接            string connectionString = stringFormat("Provider=MicrosoftACEOLEDB120;Data Source={0};Jet OLEDB:Engine Type=35;Extended Properties=Excel 80;Persist Security Info=False", excelFilename);

DataSet ds = new DataSet();  //数据集            //using中声明的对象connection,在using语句块结束后会自动释放            using (SystemDataOleDbOleDbConnection connection = new SystemDataOleDbOleDbConnection(connectionString))

{

connectionOpen();

//获取数据库架构信息,包括列、主键、表等信息                DataTable table = connectionGetOleDbSchemaTable(SystemDataOleDbOleDbSchemaGuidTables, null);

string strExcel = "select  from " + "[" + tableName + "$]";

//打开数据链接,得到一个数据集                OleDbDataAdapter adapter = new OleDbDataAdapter(strExcel, connectionString);

//在数据集中查询表名为tableName的表,然后把其数据在装入数据集ds中                adapterFill(ds, tableName);

connectionClose();

}

return dsTables[tableName];//以datatable类型返回数据集ds中表名为tableName的表        }

//判断在数据库中,指定表名的表是否存在        public bool TableExists(string table)

{

bool rythm;

connectionOpen();

//读取表名为table的表的行数信息            rythm = connectionGetSchema("Tables", new string[4] { null, null, table, "TABLE" })RowsCount > 0;

connectionClose();

return rythm;

}

//如果在建表之前,数据库已经存在该表,那么首先要先删除此表        public void DeleteTable(string tableName)

{

string sql = "drop table "+tableName+";";

connectionOpen();

OleDbCommand cmd = new OleDbCommand(sql, connection);

cmdExecuteNonQuery();

connectionClose();

}

//中间类型为dataTable的表数据转换到数据库mdb文件中        public bool dataTableToMdb(string excelPath,string tableName)

{

//获取Excel中表的数据            DataTable dt = GetExcelTable(excelPath,tableName);

//表中数据大于等于两行,数据转入格式才是正确的            if (dtRowsCount >= 2)

{

string[] cloumnName = new string[50];

//获取Excel中表的所有列名                for (int i = 0; i < dtColumnsCount; i++)

{

cloumnName[i] = dtRows[0][i]ToString();

}

//在mdb数据库文件中创建表                string sql = "create table " + tableName + " (" + cloumnName[0] + " varchar null)";

connectionOpen();

OleDbCommand cmd = new OleDbCommand(sql, connection);

cmdExecuteNonQuery();

//在mdb数据库文件中,给已创建好的表添加好所有列                    for (int i = 1; i < dtColumnsCount; i++)

{

sql = "alter table " + tableName + " add " + cloumnName[i] + " varchar null";

cmd = new OleDbCommand(sql, connection);

cmdExecuteNonQuery();

}

//在mdb数据库文件中,给已创建好的表加入数据                            for (int t = 1; t < dtRowsCount; t++)

{

sql = "insert into " + tableName + " values('";

for (int k = 0; k < dtColumnsCount; k++)

{

if (k != dtColumnsCount - 1)

{

sql = sql + dtRows[t][k]ToString() + "','";

}

else                                    {

sql = sql + dtRows[t][k]ToString() + "')";

}

}

cmd = new OleDbCommand(sql, connection);

cmdExecuteNonQuery();

}

connectionClose();

return true;

}

else            {

MessageBoxShow("Excel中"+ tableName +"表的原始数据格式不正确!");

}

return false;

}

private void button2_Click(object sender, EventArgs e)

{

int flag = 1;  //判断由Excel表导入到Mdb是否成功的标记变量                      

工资表基本列如下: 代码 姓名 工作时间 基础工资 浮动工资 岗位工资 知识分子补贴 其它工资

code name workdata basesa movesa stationsa bt othersa

char varchar char decimal decimal decimal decimal deciaml

在PB中有两种方式可控制列属性,一是静态方式,另一种是动态方式实现。所谓静态方式就是在列的属性上通过选项实现。所谓动态方式就是利用编程实现。现分别给予介绍:一、静态方法 (1)在DataWindow中选中某列后点MOUSE右键,选“properities”后系统d出一标签,选中“Edit”标签,将“Display Only”选项制为有较;

(2)或者选中“Expression”标签,在“Protect Express”中填入“1”;

(3)或者选中“Expression”标签,在“Protect Express”中填入条件表达式,如工作时间不满一年的人员不能修改,则写入“if (daysafter(date(workdate),today()) <= 365,1,0)”;

(4)在DataWindow中,将某列的Tab Order 值制为0,则该列因得不到焦点而不能被修改;

(5)在DataWindow Painter 状态下选取Rows菜单,再选取Update Properties,d出Specify Update Properties对话框,将Allow Updates 设为空。 二、动态修改方法 (1)将整个DataWindow设置为保护方式:利用DataWindow Object的ReadOnly 属性可以将整个DataWindow 设置为保护方式。 语法为:dw_1ObjectDataWindowReadOnly=value 或 dw_1Modify(“DataWindowReadOnly”)其中:value表示DataWindow是否为只读(read-only)状态,它有两个取值:Yes 和No。Yes表示使DataWindow为read-only;No 则相反,默认值是No。例如:如果要使DataWindow设置为保护方式,可以在相应事件的脚本中包含下列代码:dw_1Modify(“DataWindowReadOnly=Yes”) 或者为:

dw_1ObjectDataWindowReadOnly=Yes (2)只保护DataWindow的某些列 方法一:利用列的Protect属性 语法为:dw_1ObjectnameProtect=integer 或 dw_1Modify(“columnnameProtect”)。

参数说明:cloumnname:为要保护的列名;integer:为该列的保护状态,值为0或False时该列不受保护;值为1或True时该列受到保护。例如,要将列name设置为保护状态,则相应的代码为:dw_1ObjectnameProtect=1 或者为:dw_1Moidfy(“nameProtect=1”) 方法二:利用列的TabSequence属性,在程序执行时可以根据需要将该列的TabOrder置为0,从而达到保护的目的。语法为:dw_1ObjectnameTabSequence= number或dw_1Modify(“columnnameTabSequence”)

参数说明:columnname:要保护的列名;number:该列的TabOrder值(0-32000)。

例如,要将列name设置为保护状态,相应的代码为:

dw_1ObjectnameTabSequence=0

或者:dw_1Modify(“nameTabsequence=0”) 方法三:利用修改列的EDIT属性中的DisplayOnly属性值。 语法为:dw_1ObjectcolumnnameEditDisplayOnly=value 或 dw_1Modify(“columnnameEditDisplayOnly”)

参数说明:columnname:要保护的列名;

value:表示该列是否为只显示(DisplayOnly)状态,它有两个取值:Yes和No。Yes表示不允许用户输入数据(只显示):No则相反,默认值是No。

例如:如果要使列name设置为只显示,可以在相应事件的脚本中包含下列代码:

dw_1ObjectnameEditDisplayOnly=Yes

或者:dw_1Modify(“nameEditDisplayOnly=Yes”) 用该方法时列虽不能被修改,但该列能得到焦点,上述的其它方法则不能。 三、有选择的保护某些行上述方法将对DataWindow的所有行起作用,但要想只保护其中的某些行,则需要用列的保护(Protect)属性(取值同上述方法二),但这是在建立DataWindow时实现的。方法为:在DataWindow画板(Painter)中,双击相应的列,d出Column Object 对话框,选取Expressions页,在Protect后的框中写入if(条件表达式,1,0)。灵活运用条件表达式可以获得多种保护效果。(1)只允许修改新插入的行 在一个DataWindow中,有时会有这样的需要:已有的数据只能浏览不允许修改,只有用户新输入的数据才允许修改,此时表达式为: if(isrownew(),0,1),或者if(not isrownew(),1,0) (2)某一列的保护情况要根据其它列的数据进行 如在员工工资管理中,只有工作年限大于5年时才允许输入知识分子补贴(bt),则列bt的Protect后的框中输入:if(integer(mid(string(today(),’yyyymmdd’),1,4)) – integer(mid(workdata,1,4))>5,0,1) (3)要保护的行只有在执行时才能确定,并且不断变化例如在员工工资管理中,假设工资的修改只有该工资的输入者是变化的,且一般情况下只有在执行时才能确定条件需要一个变量,这就需要在建立DataWindow时为其指定一个检索数据的参数(如flag),然后在可修改列的Protect后的框中输入(user_name是该DataWindow中的一列,代表输入者的名称):

if (user_name=flag,0,1) 在实际应用时还要注意参数的实际类型。 (4)在表中增加一个标志列 上述方法基本上均要求要保护的行有一定的规律可循,当这些行没有规律时,可以在相应的表中专门增加一个标志列(设列名为flag),取值为1和0,然后在其它列的Protect后的框中直接输入flag的表达式。运行时若该行的flag=1,在该行相应的列处于保护状态。对于标志列值的修改,可以由数据管理员修改或根据某种情况在程序中灵活设置。

F

判断长度一般用于字符型字段

如果是某个值的长度

select length(字段名) from 表名如果是表中这个字段的长度

select data_length from user_tab_columns where table_name='表名' and cloumn_name='字段名'其中后一条语句表名和字段名需要大写

以上就是关于Oracle SQL如何判断一个字段值的长度全部的内容,包括:Oracle SQL如何判断一个字段值的长度、java 查询db2数据报错 com.ibm.db2.jcc.b.sqlexception:unsupported encoding gbk for result set cloumn、excel格式文件怎么导入至mdb文件等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9307566.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-27
下一篇2023-04-27

发表评论

登录后才能评论

评论列表(0条)

    保存