الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

وضع ## بين الرقم في جملة Select

بدأه محمد فؤاد تركي في 3 يوليو 2011 · 13 رد · 834 مشاهدة · في قواعد بيانات Microsoft SQL Server
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

الاخوة الزملاء

السلام عليكم ورحمة الله وبركاتة

عندي جملة Select نصها كالتالي

SELECT     dbo.BANKCHEQUETABLE.CHEQUENUM,
 dbo.BANKCHEQUETABLE.ACCOUNTID, 
dbo.BANKCHEQUETABLE.CURRENCYCODE, dbo.BANKCHEQUETABLE.TRANSDATE, 
                      dbo.VENDTABLE.NAME,dbo.BANKCHEQUETABLE.AMOUNTCUR,

المطلوب وضع نتيجة الحقل dbo.BANKCHEQUETABLE.AMOUNTCUR ما بين ##

مثال #100#

شكراً لكم

تم تعديل هذه المشاركة بواسطة محمد فؤاد تركي في 3 يوليو 2011 في 15:16

certifiedj.jpg

 

 

Image Hosted by ImageShack.us
#2

هل هذا المطلوب :

Select '#'+CONVERT(nvarchar(255),100)+'#'

بدل ال100 ضع اسم الحقل

فلسطين .. سوريا ..بورما ......وماذا بعد ؟!

سابقا

medo_programming

موقعي : www.alkhayat-it.com

مواضيع مهمه

-----------------------------------------------:

تعلم كل شىء عن الTriggers

#3

ظهر معايا هذا الخطأ أثناء تنفيذ الجملة

Msg 8114, Level 16, State 5, Procedure CheckDetails, Line 8
Error converting data type varchar to numeric.

certifiedj.jpg

 

 

Image Hosted by ImageShack.us
#4

ماهو نوع الحقل ؟؟

ممكن تضع جملة السيكوال .

فلسطين .. سوريا ..بورما ......وماذا بعد ؟!

سابقا

medo_programming

موقعي : www.alkhayat-it.com

مواضيع مهمه

-----------------------------------------------:

تعلم كل شىء عن الTriggers

#5

نوع الحقل

numeric(28, 12)

جملة الــ Select كاملة

USE [AXDB_2009]
GO
/****** Object:  StoredProcedure [dbo].[CheckDetails]    Script Date: 07/03/2011 17:05:20 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER proc [dbo].[CheckDetails]

@CheckNO as nvarchar(100)

as
begin

SELECT     dbo.BANKCHEQUETABLE.CHEQUENUM, dbo.BANKCHEQUETABLE.ACCOUNTID, dbo.BANKCHEQUETABLE.CURRENCYCODE, dbo.BANKCHEQUETABLE.TRANSDATE, 
                      dbo.VENDTABLE.NAME,dbo.BANKCHEQUETABLE.AMOUNTCUR,

 (Case when CURRENCYCODE = 'EGP' then dbo.Tafkeet_EGP(dbo.BANKCHEQUETABLE.AMOUNTCUR)
 Else Case when CURRENCYCODE = 'EUR' Then dbo.Tafkeet_EUR(dbo.BANKCHEQUETABLE.AMOUNTCUR)
 Else Case when CURRENCYCODE = 'GBP' then dbo.tafkeet_GBP(dbo.BANKCHEQUETABLE.AMOUNTCUR)
 Else Case when CURRENCYCODE = 'USD' then dbo.Tafkeet_USD('#'+ CONVERT(nvarchar(255), dbo.BANKCHEQUETABLE.AMOUNTCUR + '#'))

 end
 end
 end
 end)as Tafkeet

FROM         dbo.BANKCHEQUETABLE LEFT OUTER JOIN
                      dbo.VENDTABLE ON dbo.BANKCHEQUETABLE.DATAAREAID = dbo.VENDTABLE.DATAAREAID AND dbo.BANKCHEQUETABLE.RECID = dbo.VENDTABLE.RECID

where dbo.BANKCHEQUETABLE.CHEQUENUM = @CheckNO


end

تم تعديل هذه المشاركة بواسطة محمد فؤاد تركي في 3 يوليو 2011 في 18:10

certifiedj.jpg

 

 

Image Hosted by ImageShack.us
#6

اخي عدل السطر الى :

('#'+ CONVERT(nvarchar(255), dbo.BANKCHEQUETABLE.AMOUNTCUR)+ '#')

فلسطين .. سوريا ..بورما ......وماذا بعد ؟!

سابقا

medo_programming

موقعي : www.alkhayat-it.com

مواضيع مهمه

-----------------------------------------------:

تعلم كل شىء عن الTriggers

#7

لم يظهر الخطأ بعد التعديل لكني لم أحصل علي النتيجة المطلوبة

مرفق صورة توضيح النتيجة بعد التعديل ولا تحتوي علي #100,000000# تحيط الرقم من اليمين واليسار

post-46243-067719700 1309754917_thumb.jp

المرفقات
04-07-2011 6-43-09 AM.jpg

certifiedj.jpg

 

 

Image Hosted by ImageShack.us
#8

من المفروض ان يكون الحقل numeric(28, 2) اي بدل 12 ضع 2 (هذا الرقم هو عدد المنازل العشرية)

او ان تعمل تحويل في جملة الاستعلام

select 
('#'+ CONVERT(nvarchar(255),convert (numeric(28, 2),dbo.BANKCHEQUETABLE.AMOUNTCUR) )+ '#')
#9

أخي الفاضل طارق

لم يعطني التعديل النتيجة المطلوبة

certifiedj.jpg

 

 

Image Hosted by ImageShack.us
#10

انا جربت مايلي :

 
select 
('#'+ CONVERT(nvarchar(255),convert (numeric(28, 2),12312.556650000) )+ '#')

والنتيجة كانت

#12312.56#

واذا اردت ازالة الكسور يجب التحويل الى integer او وضع 0 للمنازل العشرية numeric(28, 0) لكن لاتستطيع ازالتها عندما تكون صفر وتبقيها عندما تكون اكبر من صفر الا بمعالجة آخرى

#11

جملتك سليمة 100% لكن المشكلة عندما استبدل الرقم المكتوب باسم الحقل لا تعمل ويعطيني الرقم بدون ## ولا أدري ما السبب

حاول ان تستبدل الرقم بحقل داخل قاعده البيانات بنفس نوع البيان الموجود عندي وشاهد النتيجة

تم تعديل هذه المشاركة بواسطة محمد فؤاد تركي في 4 يوليو 2011 في 13:10

certifiedj.jpg

 

 

Image Hosted by ImageShack.us
#12

لم اجد اية مشكلة لحد الان

 
USE tempdb
GO

IF OBJECT_ID('dbo.num', 'U') IS NOT NULL
  DROP TABLE dbo.num
GO

CREATE TABLE dbo.num
(
	c1 int NOT NULL, 
	c2 numeric(28,12) not NULL  

)
GO
insert into num values( 1, 124.555)
insert into num values( 1, 124.4555)
insert into num values( 1, 1524.232234345)
insert into num values( 1,1554524.5556655)
insert into num values( 1,4334124.5543434343434345)
insert into num values( 1,4334124.000000554343445)

go

select ('#'+ CONVERT(nvarchar(255),convert (numeric(28, 2),c2) )+ '#')
from dbo.num

النتيجة

#124.56#

#124.46#

#1524.23#

#1554524.56#

#4334124.55#

#13

أخي الفاضل طارق

شكراً جدا علي مجهودك

الــ Script اشتغل ولكن في هذه الحالة فقط

SELECT     dbo.BANKCHEQUETABLE.CHEQUENUM, dbo.BANKCHEQUETABLE.ACCOUNTID, dbo.BANKCHEQUETABLE.CURRENCYCODE, dbo.BANKCHEQUETABLE.TRANSDATE, 
                      dbo.VENDTABLE.NAME,('#'+ CONVERT(nvarchar(255),convert (numeric(28, 2),dbo.BANKCHEQUETABLE.AMOUNTCUR) )+ '#')as AMOUNTCUR, dbo.LEDGERJOURNALTRANS.DOCUMENTDATE, dbo.LEDGERJOURNALTRANS.JOURNALNUM, 
                      dbo.LEDGERJOURNALTRANS.VOUCHER

                     FROM         dbo.LEDGERJOURNALTRANS INNER JOIN
                      dbo.BANKCHEQUETABLE ON dbo.LEDGERJOURNALTRANS.VOUCHER = dbo.BANKCHEQUETABLE.VOUCHER LEFT OUTER JOIN
                      dbo.VENDTABLE ON dbo.BANKCHEQUETABLE.DATAAREAID = dbo.VENDTABLE.DATAAREAID AND dbo.BANKCHEQUETABLE.RECID = dbo.VENDTABLE.RECID

أما في حالة استكمال باقي الجملة كما هو واضح يظهر الخطأ التالي

ALTER proc [dbo].[CheckDetails]

@CheckNO as nvarchar(100)

as
begin

SELECT     dbo.BANKCHEQUETABLE.CHEQUENUM, dbo.BANKCHEQUETABLE.ACCOUNTID, dbo.BANKCHEQUETABLE.CURRENCYCODE, dbo.BANKCHEQUETABLE.TRANSDATE, 
                      dbo.VENDTABLE.NAME,('#'+ CONVERT(nvarchar(255),convert (numeric(28, 2),dbo.BANKCHEQUETABLE.AMOUNTCUR) )+ '#')as AMOUNTCUR, dbo.LEDGERJOURNALTRANS.DOCUMENTDATE, dbo.LEDGERJOURNALTRANS.JOURNALNUM, 
                      dbo.LEDGERJOURNALTRANS.VOUCHER,


 (Case when dbo.BANKCHEQUETABLE.CURRENCYCODE = 'EGP' then dbo.Tafkeet_EGP ('#'+ CONVERT(nvarchar(255),convert (numeric(28, 2),dbo.BANKCHEQUETABLE.AMOUNTCUR) )+ '#')  
Else Case when dbo.BANKCHEQUETABLE.CURRENCYCODE = 'EUR' Then dbo.Tafkeet_EUR ('#'+ CONVERT(nvarchar(255),convert (numeric(28, 2),dbo.BANKCHEQUETABLE.AMOUNTCUR) )+ '#')
Else Case when dbo.BANKCHEQUETABLE.CURRENCYCODE = 'GBP' then dbo.tafkeet_GBP ('#'+ CONVERT(nvarchar(255),convert (numeric(28, 2),dbo.BANKCHEQUETABLE.AMOUNTCUR) )+ '#')
Else Case when dbo.BANKCHEQUETABLE.CURRENCYCODE = 'USD' then dbo.Tafkeet_USD ('#'+ CONVERT(nvarchar(255),convert (numeric(28, 2),dbo.BANKCHEQUETABLE.AMOUNTCUR) )+ '#')


end
end
end
 end)as Tafkeet

FROM         dbo.LEDGERJOURNALTRANS INNER JOIN
                      dbo.BANKCHEQUETABLE ON dbo.LEDGERJOURNALTRANS.VOUCHER = dbo.BANKCHEQUETABLE.VOUCHER LEFT OUTER JOIN
                      dbo.VENDTABLE ON dbo.BANKCHEQUETABLE.DATAAREAID = dbo.VENDTABLE.DATAAREAID AND dbo.BANKCHEQUETABLE.RECID = dbo.VENDTABLE.RECID


where dbo.BANKCHEQUETABLE.CHEQUENUM = @CheckNO


end

Msg 8114, Level 16, State 5, Procedure CheckDetails, Line 8
Error converting data type nvarchar to numeric.

لا أدري ما السبب هل Case When هي السبب

certifiedj.jpg

 

 

Image Hosted by ImageShack.us
#14

اشتغل أخيراً

شكراً لك أخي الفاضل طارق والاخ ميدو

ALTER proc [dbo].[CheckDetails]

@CheckNO as nvarchar(100)

as
begin

SELECT     dbo.BANKCHEQUETABLE.CHEQUENUM, dbo.BANKCHEQUETABLE.ACCOUNTID, dbo.BANKCHEQUETABLE.CURRENCYCODE, dbo.BANKCHEQUETABLE.TRANSDATE, 
                      dbo.VENDTABLE.NAME,('#'+ (CONVERT(nvarchar(255),dbo.BANKCHEQUETABLE.AMOUNTCUR) )+ '#')as AMOUNTCUR, dbo.LEDGERJOURNALTRANS.DOCUMENTDATE, dbo.LEDGERJOURNALTRANS.JOURNALNUM, 
                      dbo.LEDGERJOURNALTRANS.VOUCHER,


 (Case when dbo.BANKCHEQUETABLE.CURRENCYCODE = 'EGP' then dbo.Tafkeet_EGP (dbo.BANKCHEQUETABLE.AMOUNTCUR) 
Else Case when dbo.BANKCHEQUETABLE.CURRENCYCODE = 'EUR' Then dbo.Tafkeet_EUR (dbo.BANKCHEQUETABLE.AMOUNTCUR)
Else Case when dbo.BANKCHEQUETABLE.CURRENCYCODE = 'GBP' then dbo.tafkeet_GBP (dbo.BANKCHEQUETABLE.AMOUNTCUR)
Else Case when dbo.BANKCHEQUETABLE.CURRENCYCODE = 'USD' then dbo.Tafkeet_USD (dbo.BANKCHEQUETABLE.AMOUNTCUR)


end
end
end
 end)as Tafkeet

FROM         dbo.LEDGERJOURNALTRANS INNER JOIN
                      dbo.BANKCHEQUETABLE ON dbo.LEDGERJOURNALTRANS.VOUCHER = dbo.BANKCHEQUETABLE.VOUCHER LEFT OUTER JOIN
                      dbo.VENDTABLE ON dbo.BANKCHEQUETABLE.DATAAREAID = dbo.VENDTABLE.DATAAREAID AND dbo.BANKCHEQUETABLE.RECID = dbo.VENDTABLE.RECID


where dbo.BANKCHEQUETABLE.CHEQUENUM = @CheckNO


end

certifiedj.jpg

 

 

Image Hosted by ImageShack.us

مواضيع مشابهة